Solr php метод поиска клиента: использовать для поиска word1 ИЛИ word2? - PullRequest
1 голос
/ 15 декабря 2009

я использую клиент phr solr.

но когда я использую метод поиска:

$params = array('qf' => 'threads.title posts.body', 'defType' => dismax);

$results = $solr->search($query, $offset, $limit, $params);

когда я использую defType = dismax, он ищет $ query = 'Peter Jakob' как целую строку вместо Peter OR Jakob. это работает нормально, когда я не использую $ params. Но главная проблема заключается в том, что мне приходится использовать dismax для возможности поиска по нескольким полям.

Как я могу заставить клиента solr php узнать, что мне нужно искать в нескольких полях и для нескольких значений (ИЛИ)?

Вот мой обработчик поиска, который я использую:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <!-- default values for query parameters -->
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <!--
       <int name="rows">10</int>
       <str name="fl">*</str>
       <str name="version">2.1</str>
        -->
     </lst>
  </requestHandler>

Ответы [ 2 ]

2 голосов
/ 15 декабря 2009

Solr имеет интерфейс, который позволяет увидеть, как он обрабатывает ваш запрос. Может быть, вы можете получить некоторые подсказки там? Он находится в ссылке АНАЛИЗ (http://ora.ouls.ox.ac.uk:8080/solr/admin/analysis.jsp?highlight=on) на странице администрирования solr (http://ora.ouls.ox.ac.uk:8080/solr/admin/), хотя в данном случае solr он не работает Пожалуйста, проверьте это в вашем собственном случае.

Может быть, вы должны прочитать это: http://wiki.apache.org/solr/SolrQuerySyntax и это: http://lucene.apache.org/java/2_4_0/queryparsersyntax.html

В документации schema.xml http://wiki.apache.org/solr/SchemaXml указано, что

Оператор по умолчанию, используемый Solr. парсер запросов (SolrQueryParser) может быть настроен с

<solrQueryParser defaultOperator="AND|OR"/>

The оператор по умолчанию "ИЛИ", если не определено.

Так что это должно работать для вас, не делая ничего конкретного.

Если вы хотите преобразовать $ query = "Peter Jakob" в Peter OR Jakob, просто сделайте следующее:

$query = preg_replace('`(\\s)(\\w|"[^"]+")`', '\\1OR \\2', $query);
1 голос
/ 08 февраля 2010

Это не совсем то, что вам нужно, но вы можете искать в нескольких полях, не используя dismax и не писать сложные запросы. Один простой подход состоит в том, чтобы использовать систему copyField, чтобы скопировать поля поиска по умолчанию в одно и затем установить это в качестве поля поиска по умолчанию, например, этот пример с полями "title" и "description".

Есть такие поля:

   <field name="title" type="string" indexed="false" stored="true" />
   <field name="description" type="string" indexed="false" stored="true" />
   <field name="combined" type="string" indexed="true" stored="false" multiValued="true" />

Настройте поля копирования следующим образом:

 <copyField source="title" dest="combined" />
 <copyField source="description" dest="combined" />

И установите поиск по умолчанию следующим образом:

 <defaultSearchField>combined</defaultSearchField>

Это приведет к тому, что поиск будет выполняться по «комбинированному» полю по умолчанию, которое содержит заголовок и описание.

...