Повысьте результат по указанному поисковому запросу сверху - PullRequest
1 голос
/ 11 октября 2011

Я использую Apache Solr 3.1 с Drupal

Как повысить результат сверху, указанный в поле поиска?

Пример в поле поиска, если пользователь вводит продолжение , solr показывает документ с Непрерывностью сверху и документ с продолжением ниже. покажите тот, у которого продолжается выше, чем Continuity

http://localhost:8983/solr/select/?q=continuing&qf=title&fl=title%20score&bq=title:continuing^10.0

1 Ответ

0 голосов
/ 11 октября 2011

Кажется, у вас есть стеммер в цепях фильтра, из-за чего продолжение и Непрерывность и сопоставлены с одним и тем же корнем и будут рассматриваться равными.

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

Solr в настоящее время не повышает точное совпадение выше, чем другие термины, которые создали тот же корень.
Одним из вариантов будет иметь два поля в вашей схеме.
Stemmed (title_stemmed) и версия без Stemmed (title - без фильтра stemming)

пример -

schema.xml -

<!-- Without Porter Stemmer -->
<fieldType name="text_non_stemmed" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

<!-- With Porter Stemmer -->
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
</fieldType>

<field name="title" type="text" indexed="true" stored="true" termVectors="false" omitNorms="false"/>    
<field name="title_non_stemmed" type="text_non_stemmed" indexed="true" stored="true" termVectors="false" omitNorms="false"/>

<copyField source="title" dest="title_non_stemmed"/>

Вы можете взвесить поля -

solrconfig.xml - изменить обработчик запроса по умолчанию

<requestHandler name="search" class="solr.SearchHandler" default="true">
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <str name="defType">dismax</str>
   <str name="qf">
      title_non_stemmed^1 title^0.8
   </str>
   <str name="q.alt">*:*</str>
   <str name="rows">10</str>
   <str name="fl">*,score</str>
 </lst>
</requestHandler>

так что точное совпадение дает больше очков, чем неточное совпадение, и выглядит выше.

URL -

http://localhost:8983/solr/select/?q=continuing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...