2013-03-25 120 views
4

我遇到Solr中特定關鍵字的搜索結果不一致。Solr:搜索結果不一致

行爲:

例如,關鍵字是'音樂',並有3個索引的文檔包含此關鍵字。

使用此關鍵字使用URL「http://abc.xyz.com:8983/solr/core3/select/?q=music」執行搜索,當我們再次點擊它時它會給出單個文件它將返回所有三個索引文件。我們再次擊中它將返回單個文檔。這就是一貫發生的不一致行爲。

我不能想到是什麼導致了這個問題。

它是Solr緩存嗎?它與其他Solr配置有關嗎?

Solr的版本:3.6.1

從solrconfig.xml中的重要配置

<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">50</int> 
     <str name="df">keywords</str> 
    </lst> 
</requestHandler> 
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
    <lst name="defaults"> 
     <str name="config">db-data-config-xsl.xml</str> 
    </lst> 
</requestHandler> 

<filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0"/> 
<queryResultCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/> 

schema.xml中

 </analyzer> 
    </fieldType> 
    <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
    <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/> 
    <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/> 
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 

     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English"/> 
     </analyzer> 
    </fieldType> 
    <fieldType name="shingleString" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
     <analyzer type="index"> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 

      <filter class="solr.PositionFilterFactory" /> 
     </analyzer> 
    </fieldType> 
    <fieldType name="facet_tex" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
     <analyzer> 

      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
      <!-- The TrimFilter removes any leading or trailing whitespace --> 
      <filter class="solr.TrimFilterFactory" />   
      <!--filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" /--> 
     </analyzer> 
    </fieldType> 

    <fieldType name="facet_comma" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
     <analyzer> 
      <tokenizer class="solr.PatternTokenizerFactory" pattern=","/> 

      <filter class="solr.LowerCaseFilterFactory" /> 
      <!-- The TrimFilter removes any leading or trailing whitespace --> 
      <filter class="solr.TrimFilterFactory" /> 
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>    
      <!--filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" /--> 
     </analyzer> 
    </fieldType> 

     <fieldType name="text_auto" class="solr.TextField"> 
      <analyzer> 
       <tokenizer class="solr.PatternTokenizerFactory" pattern=","/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.TrimFilterFactory" /> 
       <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" side="front" /> 
      </analyzer> 
     </fieldType> 


    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 

      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 
    <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="," replacement=" "/> 

      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 

      <filter class="solr.LowerCaseFilterFactory"/> 

     </analyzer> 
     <analyzer type="query"> 
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="," replacement=" "/> 

      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 

      <filter class="solr.LowerCaseFilterFactory"/> 

     </analyzer> 
    </fieldType> 
    <fieldType name="text_en_comma" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 

      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="," replacement=" "/> 

      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.TrimFilterFactory" /> 

      <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      enablePositionIncrements="true" /> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPossessiveFilterFactory"/> 
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 

     </analyzer> 
     <analyzer type="query"> 

      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      enablePositionIncrements="true"    /> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPossessiveFilterFactory"/> 

     </analyzer> 
    </fieldType> 

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

      <filter class="solr.LowerCaseFilterFactory" /> 

      <filter class="solr.TrimFilterFactory" /> 

      <filter class="solr.PatternReplaceFilterFactory" 
      pattern="([^a-z])" replacement="" replace="all"/> 
     </analyzer> 
    </fieldType> 
    <fieldType name="text_en_suggest" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
     <analyzer type="index"> 
      <tokenizer class="solr.PatternTokenizerFactory" pattern=","/> 
      <filter class="solr.TrimFilterFactory" /> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" /> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPossessiveFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.PatternTokenizerFactory" pattern=","/> 
      <filter class="solr.TrimFilterFactory" /> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPossessiveFilterFactory"/> 
     </analyzer> 
    </fieldType> 
</types> 

<fields> 

    <field name="section"  type="string" indexed="true" stored="true" multiValued="false" /> 
    <field name="url" type="string" indexed="false" stored="true" multiValued="false" /> 
    <field name="title" type="string" indexed="true" stored="true" multiValued="false" /> 
    <field name="description"  type="string" indexed="true" stored="true" multiValued="false" /> 
    <field name="keywords"  type="text_en_comma" indexed="true" stored="true" multiValued="true" /> 
    <field name="category" type="facet_comma" indexed="true" stored="true" multiValued="false" /> 
    <field name="robots" type="string" indexed="true" stored="true" multiValued="false" /> 
    <field name="keywords_suggest"  type="text_en_suggest" indexed="true" stored="true" multiValued="true" /> 

</fields> 

<copyField source="keywords" dest="keywords_suggest"/> 



<uniqueKey>title</uniqueKey> 


<defaultSearchField>keywords</defaultSearchField> 


<solrQueryParser defaultOperator="AND"/> 

將不勝感激,如果有人能指導。

感謝, Bhavesh

+1

有幾個問題:1)您是否將核心(core3)設置作爲分佈式查詢的存根? 2)索引作業是否在後臺運行?您可以嘗試使用solr管理面板來詳細分析文檔如何與查詢匹配。 http://wiki.apache.org/solr/SolrAdminGUI – guruprasath 2013-03-25 12:33:57

+0

我有多個核心設置,但不適用於分佈式查詢僅用於備份。我不確定如何在覈心之間對索引進行分區。回答你的第一個問題,考慮到只有一個核心,它被命名爲core3。對於第二個問題,我通過點擊https://abc.xyz.com/solr/core3/dataimport?command=full-import&clean=true手動執行索引。我應該從哪些部分着重分析這個特定問題? – Bhavesh 2013-03-25 13:51:01

+0

1)關注管理面板查詢分析... 2)您還可以打開corename \ data \ index * .fdt文件中的索引文件,並查看您的關鍵字是否存在。這個索引文件不會是人類可讀的,這種分析不是可靠的,但對於簡單的文檔,您可以看到關鍵字是否在該索引中重複三次。此外,您能否解釋如何使用核心進行備份? – guruprasath 2013-03-25 14:11:20

回答

0

檢查您的PARAM timeAllowed,它可以在一些處理器描述solrconfix.xml

還質疑:你的指數有多大?如何搞清楚你的​​solrconfix.xml和scheme.xml文件。

+0

索引很小,只有40個文檔。我正在使用Solr 3.6.1版本。 solrconfig.xml是一個相當龐大的文檔,但重要的是請看看上面的重要配置。 – Bhavesh 2013-03-26 06:40:04

+0

你能分享你的scheme.xml嗎(只是字段塊和一些類型,如果你使用自定義類型)? – iMysak 2013-03-26 09:23:45

+0

是否有可能共享一個文件,或者我必須在這裏粘貼整個東西? – Bhavesh 2013-03-26 09:29:37