2012-12-28 73 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>