Solr - 如何编写查询表达式“查询分析器生成的每个令牌必须发生”

时间:2014-04-30 07:31:17

标签: solr lucene

我正在使用Solr 4.7。我的索引有一个字段" text"

如果我输入查询

text:T1T2T3

假设T1T2T3的分析器输出是token1 = T1 token2 = T2 token3 = T3(文本语言不使用空格来分割单词),查询被解析为

text:T1 text:T2 text:T3 

因此,如果字段包含T1或T2或T3中的任何一个,则它将显示在搜索结果中。

我想要的是,如果一个字段包含T1 AND T2 AND T3,它将出现在搜索结果中。

换句话说,我想编写一个查询表达式(某个运算符)文本:T1T2T3将被解析为

+text:T1 +text:T2 +text:T3 

我试过

+text:T1TT2T3   parsed to    +(text:T1 text:T2 text:T3)

" T1T2"会匹配。不好。

另一次尝试:

text:"T1T2T3"  parsed to   text:"T1 T2 T3"

" T1T4T2T5T3"不会比赛。不好。

如何编写T1T2T3可以解析为+ text的查询:T1 + text:T2 + text:T3这意味着查询分析器生成的每个令牌都必须出现?感谢。

1 个答案:

答案 0 :(得分:0)

可能你需要为此编写自己的Custom CJK Tokenizer。

我打算建议使用NGram tokeniser,但它会生成所有组合,例如:“BC”,“DE”等。

所以你可能需要下载Solr源代码。查看NGramTokenizer的实现,也可以在Java中实现自己的tokenizer,并使用自定义过滤器生成一个jar文件并使用它。