2012-12-28 86 views
2

我想知道是否有可能有空白建議?我與推薦人一起工作,但它只給出了令牌結果。什麼我正在尋找Solr空白建議/查詢分析器

例子:

Indexed item: b123-456 

這被tokinized爲B123和456 現在,用戶正在尋找b123456。搜索返回0結果(如果它不返回0的結果,這不應該發生)

現在我想建議建議使用b123和456 seperatly。

它將長的字母數字分割爲ser點,然後查看該令牌是否存在,以及是否存在2或3個令牌,使其更高。

我可以寫我自己的代碼,它分裂了這個詞,但這會讓成千上萬的查詢得到一些結果。

有什麼顯示這種行爲?

可能由於存在大量的可能性而導致空白不可能,因此建議者會留下特殊字符,如「 - 」,「/」,「。」

回答

0

做到這一點,最好的辦法是在索引查詢階段相應的「schema.xml中」配置字段類型。

這就是說,我建議你做一些關於索引和查詢分析階段如何在SOLR中工作的研究。我的猜測是你應該關注solr.WordDelimiterFilterFactory(請參閱下面的示例)。

下面是一個可能有用的例子。 (不保證:-))

祝你好運!

<!-- A text field with defaults appropriate for English, plus 
    aggressive word-splitting and autophrase features enabled. 
    This field is just like text_en, except it adds 
    WordDelimiterFilter to enable splitting and matching of 
    words on case-change, alpha numeric boundaries, and 
    non-alphanumeric chars. This means certain compound word 
    cases will work, for example query "wi fi" will match 
    document "WiFi" or "wi-fi". 
    --> 
    <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
     <analyzer type="index"> 
      <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType>