2014-05-11 17 views
1

當我發出一個查詢Solr的 - 使用兩個或多個單詞的搜索只用第一個字的得分

q=fulltext:marina zadar 

的Solr只使用單詞「碼頭」來計算文檔得分。如果我禁用了索引詞的頻率和位置,那麼對於包含僅包含單詞「marina」的文檔和文檔的文檔,分數都是相同的。

這是當我使用下面

<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">100</int> 
     <str name="df">title</str> 
    </lst> 
</requestHandler> 

請求處理。當我定義另一個請求處理程序,

<requestHandler name="/full" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">100</int> 
     <str name="df">fulltext</str> 
    </lst> 
</requestHandler> 

併發出查詢到處理程序

q=marina zadar 

所有正常工作 - 包含兩個搜索詞的文檔得分高於預期。

爲什麼查詢q=fulltext:marina zadar使用/select處理程序評分文檔與其他示例不同?

這裏是我的schma.xml

<schema name="example" version="1.5"> 

<fields> 

    <field name="_version_" type="long" indexed="true" stored="true"/> 
    <field name="id" type="long" indexed="true" stored="true" required="true" /> 
    <field name="name" type="string" indexed="true" stored="true" /> 
    <field name="subName" type="string" indexed="false" stored="true" /> 
    <field name="nearName" type="string" indexed="false" stored="true" /> 
    <field name="countryName" type="string" indexed="false" stored="true" /> 
    <field name="title" type="text_general_edge_ngram" indexed="true" stored="false" multiValued="true" /> 
    <field name="fulltext" type="text_general" indexed="true" stored="true" /> 

</fields> 

<uniqueKey>id</uniqueKey> 

<copyField source="name" dest="title" /> 
<copyField source="subName" dest="title" /> 

<!--<similarity class="com.pocketsail.solr.DescriptionSimilarity" />--> 

<types> 

    <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 

    <fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
      <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
      <filter class="solr.ASCIIFoldingFilterFactory"/> 
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
      <filter class="solr.ASCIIFoldingFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" omitNorms="true" omitTermFreqAndPositions="true"> 
     <analyzer type="index"> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.ASCIIFoldingFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.ASCIIFoldingFilterFactory"/> 
     </analyzer> 
    </fieldType> 

</types> 

</schema> 
+0

如果您想搜索AND https://programinghacksandtricks.blogspot.in/2018/01/multiple-word-search-in-solr.html –

回答

3

原來的話需要被括號括起來。如果我發出

Q =全文:(碼頭扎達爾)

兩個詞在文獻和結果的得分作爲預期的是有序的。發佈q=fulltext:marina zadar在指定的'fulltext'字段中查找單詞「marina」,並在solrconfig.xml中爲字段中的「zadar」字樣查找所使用的查詢處理程序。

這可能是一個菜鳥錯誤,但也許它會幫助未來的某個人。

+0

中的兩個kewords,您可以接受您自己的問題 – sidgate

相關問題