【问题标题】:Compounding words for Solr indexingSolr 索引的复合词
【发布时间】:2019-01-11 21:06:07
【问题描述】:

是否有将单词组合应用于输入的过滤器或标记器? 例如,如果我有“Hello Guys How are you?”,它也必须以这种方式索引:“HelloGuys”、“GuysHow”、“Howare”、“areyou”,当我搜索术语“HelloGuys”时,它必须找到具有该字段值的文档。我认为 WordDelimiterGraphFilter 是正确的过滤器,但它划分复合词,它不会产生复合词。我正在寻找类似的东西,与 WordDelimiterGraphFilter 相对,谢谢。

【问题讨论】:

    标签: java indexing filter solr lucene


    【解决方案1】:

    您正在寻找的东西称为带状疱疹。 Solr 有一个ShingleFilter,当它们出现在令牌流中时,它将令牌连接在一起。如果需要,您可以调整要连接在一起的令牌数量(即HelloGuysHow),并根据需要更改令牌之间的分隔符(即Hello_Guys)。

    <analyzer>
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.ShingleFilterFactory"/>
    </analyzer>
    

    在:“成为,还是什么?”

    要过滤的标记器:“To”(1)、“be”(2)、“or”(3)、“what”(4)

    输出:“To”(1)、“To be”(1)、“be”(2)、“be or”(2)、“or”(3)、“or what”(3)、 “什么”(4)

    对于您的用例,请使用tokenSeparator=""

    【讨论】:

    • 太棒了。非常感谢您的帮助 :)。 PS:不使用tokenSeparator,需要额外输入一个过滤器来去除tokens中的空白。
    • 对不起,我又问了。有没有办法将 minShingleSize 设置为令牌流的单词数?我想让过滤器加入从两个到令牌流的所有单词。
    • 在这种情况下,minShingleSize 将设置为 2,而您可以将 maxShingleSize 设置为一个较大的值,以使其在令牌流中组合它之后的每个术语。 shingle filter 文档页面上的示例显示 maxShingleSize 设置为 4。
    • 所以如果我不知道单词的数量,我必须将 maxShingleSize 设置为 10000 并且我确信它会覆盖所有的链单词。对吗?
    • 正确,不给值默认设置为2。
    猜你喜欢
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多