2010-02-08 32 views
6

我正在做一些多面搜索,但有一些問題。在分面搜索字段中有幾個單詞時,我沒有得到期望的結果。多面搜索問題

示例:下面的條目「動物」字段:

 A horse 

     Black horse 

     Black horse 

拉麪搜索發送回「馬(3)」作爲最好的結果,而我想拿回「黑馬(2) 」。

而這是schema.xml。搜索字段爲BUSQUEDA,分面字段爲SUPERFICIE。我想我已經嘗試了這兩個字段中定義類型的大部分可能的組合,但仍然無效。

<?xml version="1.0" encoding="UTF-8" ?> 
     <schema name="example" version="1.2"> 
     <types> 

    <fieldType name="string" class="solr.StrField"/> 

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

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

      <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" 
      enablePositionIncrements="true"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
      catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" 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="stopwords.txt" 
      enablePositionIncrements="true"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
      catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="textTight" class="solr.TextField" positionIncrementGap="100" > 
      <analyzer> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0"  catenateWords="1" catenateNumbers="1" catenateAll="0"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="textMultidioma" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" 
       enablePositionIncrements="true" /> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
       catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      </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="stopwords.txt" enablePositionIncrements="true"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
      catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      </fieldType> 

     </types> 

     <fields> 
      <field name="BUSQUEDA" type="facet_tex" indexed="true" stored="true"/> 
      <field name="SUPERFICIE" type="facet_tex" indexed="true" stored="true"/> 
      <field name="NOMBRE" type="string" indexed="true" stored="true"/> 
     </fields> 
     <uniqueKey>NOMBRE</uniqueKey> 
     <defaultSearchField>BUSQUEDA</defaultSearchField></schema> 

有什麼建議嗎?

非常感謝!

+0

您是否在每個字段類型更改後重建索引? – 2010-02-09 16:20:14

+0

我試圖做到這一點,但沒有發生新的事情。我想我有任何我不能注意到的錯誤。 – Carlos 2010-02-09 17:30:04

回答

3

您必須面向非標記化字段(字段類solr.StrField或使用solr.KeywordTokenizerFactory)。 This thread詳細解釋它。

+0

我一直在努力做到這一點,但似乎並不奏效。我仍然得到相同的結果。無論如何,感謝您的幫助 – Carlos 2010-02-09 10:38:49

+0

@Carlos:你有什麼嘗試?發表您的schema.xml – 2010-02-09 10:53:42

+0

我與BUSQUEDA是「facet_texPersonal」和我所得到的是嘗試: A(1) 黑色(2) 它一樣,如果它僅僅考慮的第一個字 – Carlos 2010-02-09 16:25:15

3

我們有一個多字分面的領域工作的項目,我以前的工作。下面是(部分)與本schema.xml中:

<schema name="example" version="1.2"> 
<types> 
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
    ... 
</types> 
<fields> 
    <field name="grant_type" type="string" indexed="true" stored="true" /> 
    ... 
</fields> 
</schema> 

如毛具有突出的小面字段必須非標記化(未在被劃分到單獨的字)。在上面的配置中,我們使用'solr.StrField'(非標記化)字段類型。

可以在the Solr Faceting Overview page上找到有關分面字段類型的更多提示(不轉換爲小寫字母,不去除標點符號等)。