Solr: как искать несколько полей - PullRequest
3 голосов
/ 16 октября 2011

Я использую solrnet.У меня есть поля заголовка и описания.Мне нужно искать оба поля одновременно.Как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 16 октября 2011

Ответ Джаендры верный, но если вы хотите сделать это без агрегирования данных в одном поле во время индекса (copyFields) и хотите сделать это во время запроса вместо использования стандартного обработчика вместо dismax, в SolrNet выможно сделать:

var query = Query.Field("title").Is(mytitle) || Query.Field("Description").Is(mydescription);
var results = solr.Query(query);

См. операторы запросов и DSL для получения дополнительной информации.

2 голосов
/ 16 октября 2011

Если вы используете стандартный обработчик запросов -
Создайте новое поле title_description и скопируйте поле заголовка и описания в это поле.
Используйте это поле в качестве поля поиска по умолчанию.

<defaultSearchField>title_description</defaultSearchField>

Запрос q запущен с поиском в поле поиска по умолчанию -

q=bank

ИЛИ

Если вы можете использовать анализатор запросов dismax или edismax, вы можете определитьновый обработчик запросов.
Определите поля запроса как qf.

<requestHandler name="dismax" class="solr.SearchHandler">
   <lst name="defaults">
     <str name="echoParams">explicit</str>
     <!-- Query settings -->
     <str name="defType">edismax</str>
     <str name="qf">
        title description
     </str>
     <str name="q.alt">*:*</str>
     <str name="rows">10</str>
     <str name="fl">*,score</str>
   </lst>
</requestHandler>

Запрос - передать dismax в качестве параметра qt, который будет искать в полях заголовка и описания

q=bank&qt=dismax
0 голосов
/ 11 октября 2017

Пожалуйста, попробуйте передать массив строк, который содержит несколько имен полей и текст для поиска в методе ниже.Я верну запрос solrnet для поиска с несколькими именами полей с условием ИЛИ.

public ISolrQuery BuildQuery(string[] SearchFields, string SearchText)
    {

        AbstractSolrQuery firstQuery = new SolrQueryByField(SearchFields[0], SearchText) { Quoted = false };
        for (var i = 1; i < SearchFields.Length; i++)
        {
            firstQuery = firstQuery || new SolrQueryByField(SearchFields[i], SearchText) { Quoted = false };
        }

        return firstQuery;
    }
...