2015-06-09 2 views
2

Как ссылки в данной ссылкеТочное слово не повышая значительно Solr

https://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_make_exact-case_matches_score_higher 

Я попробовал один пример. моя конфигурация schema.xml, приведенная ниже.

 <field name="product_name" type="text_wslc" indexed="true" stored="true" required="true" multiValued="false"/> 
     <field name="nameString" type="string_ci" indexed="true" stored="false" required="true" /> 
       <copyField source="product_name" dest="nameString"/> 

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
       <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
       <fieldType name="text_wslc" class="solr.TextField" positionIncrementGap="100"> 
         <analyzer type="index"> 
            <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
         <filter class="solr.WordDelimiterFilterFactory" 
          generateWordParts="1" 
          generateNumberParts="1" 
          catenateWords="1" 
          catenateNumbers="1" 
          catenateAll="1" 
          preserveOriginal="1" 
          /> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.SnowballPorterFilterFactory" language="English" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
       <filter class="solr.KStemFilterFactory"/> 
       <filter class="solr.EnglishMinimalStemFilterFactory"/> 
         </analyzer> 
         <analyzer type="query"> 
           <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" 
          generateWordParts="1" 
          generateNumberParts="1" 
          catenateWords="1" 
          catenateNumbers="1" 
          catenateAll="1" 
          preserveOriginal="1" 
          /> 
           <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.SnowballPorterFilterFactory" language="English" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
       <filter class="solr.KStemFilterFactory"/> 
       <filter class="solr.EnglishMinimalStemFilterFactory"/> 
         </analyzer> 
       </fieldType> 

<fieldType name="string_ci" class="solr.TextField" tMissingLast="true" omitNorms="true"> 
      <analyzer type="query"> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
     </fieldType> 

Точный поиск слова прекрасно работает с этим.

Но нечеткий поиск с точным совпадением не дает ожидаемого результата. Это мой запрос

/select?q=(laptop bag)&defType=dismax&qf=nameString^22+product_name^0.1 

Любая помощь?

+1

"nameString" в избранном, а не в «nameSrting»? – Zac

+0

Нет, это была моя ошибка – Juhan

+0

Это сообщение имеет именно то, что вам нужно: http://stackoverflow.com/questions/30659452/solr-exact-word-result-come-first/30734896#30734896 –

ответ

1

Вам нужно создать новый тип поля этого путь ...

<fieldType name="string_ci" class="solr.TextField" 
    sortMissingLast="true" omitNorms="true"> 
    <analyzer> 
     <tokenizer class="solr.KeywordTokenizerFactory"/>   
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 

Теперь создайте поле nameSrting так:

<field name="nameSrting" type="string_ci" indexed="true" stored="true"/> 

и скопировать содержимое product_name в nameSrting, как это:

<copyField source="product_name" dest="nameSrting"/> 

Теперь вам нужно выполнить запрос с указанием вы хотите получить точную фразу, используя двойные кавычки, как это:

http://localhost:8983/solr/Dummy2/select?q= "ноутбук + сумка" & вес = JSON & defType = dismax & QF = nameSrting^222 + product_name^0,1

+0

при использовании цитат вокруг поисковых слов, значительно уменьшающих мои результаты поиска, даже если точно результаты поиска приходят на первое место Пример http: // localhost: 8983/solr/Dummy2/select? q = "laptop + bag" & wt = json & defType = dismax & qf = nameSrting^222 + product_name^0,1 дает 82 результата, но http: // localhost: 8983/solr/Dummy2/select? q = laptop + bag & wt = json & defType = dismax & qf = nameSrting^222 + product_name^0.1 дает около 5000 результатов. Как это происходит? Как я могу поддерживать тот же результат, что и 5000 с точным совпадением – Juhan

+0

@JuhanSusan: используйте 'pf', как я сказал в своем ответе: http://stackoverflow.com/questions/30621679/solr-rule-based-boost/30860694# 30860694 –

Смежные вопросы