Нужен искомый текст и несколько строк вокруг него в поиске Solr в java api

я использую solr 7.7.2, и я написал Java-программу в Solr, используя solrj, которая ищет слово в огромном текстовом файле. Я использую следующий код, чтобы показать результаты поиска, представляющие весь текст.

SolrQuery params = new SolrQuery();
params.setQuery("content:word for search");

Как отобразить только одну строку текста, где слово находится в этой строке?

Весь код такой

public static void main(String args[]) throws SolrServerException, IOException
    {
        String urlString = "http://localhost:8983/solr/test_core";
        SolrClient Solr = new HttpSolrClient.Builder(urlString).build();

        SolrQuery params = new SolrQuery();
        params.setQuery("content:word for search");

        params.setSort("score", SolrQuery.ORDER.desc);

        QueryResponse queryResponse = Solr.query(params);

        SolrDocumentList result = queryResponse.getResults();
        for (int i = 0 ; i < result.size(); i++ )
        {
            System.out.println(result.get(i) + " \n");
        }
    }


person Farzad Ebrahimi    schedule 10.02.2020    source источник


Ответы (1)


Highlighting — это одна из функций solr. Вы должны передать параметры запроса для выделения: -

hl — установлено значение true, это позволяет генерировать выделенные фрагменты в ответе на запрос.

hl.fl — указать список полей для выделения. char * выделит все поля

hl.fragsize — размер в символах фрагментов (фрагментов), созданных маркером. В исходном Highlighter «0» означает, что следует использовать все значение поля без фрагментации. По умолчанию фрагмент имеет размер 100 символов.

Проверьте, добавив приведенный ниже код.

params.setHighlight(true).setHighlightSnippets(1);
params.setParam("hl.fl", "*");
params.setParam("hl.fragsize", "0");

Вот полный код, который вы можете попробовать.

Примечание . Не обращайте внимания на жестко заданные элементы кода, такие как жестко заданный URL "solrUrl = "http://localhost:8983/solr" и строка "return "Success"". Они должны быть прочитаны из файла свойств и из файла констант. Ожидайте, что вы сделаете то же самое. Никогда не используйте System out в своей работе. код.

public String getResult() throws SolrServerException, IOException {

        final SolrClient client = getSolrClient();
        ModifiableSolrParams params = new ModifiableSolrParams ();


        params.set ("q", "comment_t:pizza");
        params.set ("fl", "id, comment_t");
        params.set ("sort", "id asc");
        params.set("hl", true);
        params.set("hl.q", "pizza");
        params.set("hl.simple.pre", "<strong>");
        params.set("hl.simple.post", "</strong>");
        params.set("hl.fl", "comment_t");
        params.set("hl.fragsize", "100");

        final QueryResponse response = client.query("demo", params);
        response.getHighlighting();

        final SolrDocumentList documents = response.getResults();

        System.out.println("Found " + documents.getNumFound() + " documents");
        for (SolrDocument document : documents) {
            final String id = (String) document.getFirstValue("id");
            final String name = (String) document.getFirstValue("comment_t");

            System.out.println("id: " + id + "; comment_t: " + name);

            if(response.getHighlighting() != null){
                System.out.println("highlighted text :: " + response.getHighlighting());
            }
        }
        return "Success";
    }



private SolrClient getSolrClient() {

        final String solrUrl = "http://localhost:8983/solr";
        return new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000).withSocketTimeout(60000).build();
    }

Пожалуйста, найдите скриншот вывода:

Выделение вывода

person Abhijit Bashetti    schedule 10.02.2020
comment
@FarzadEbrahimi: что ты пробовал? что у вас не работает? - person Abhijit Bashetti; 13.02.2020