我正在使用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这意味着查询分析器生成的每个令牌都必须出现?感谢。
答案 0 :(得分:0)
可能你需要为此编写自己的Custom CJK Tokenizer。
我打算建议使用NGram tokeniser,但它会生成所有组合,例如:“BC”,“DE”等。
所以你可能需要下载Solr源代码。查看NGramTokenizer的实现,也可以在Java中实现自己的tokenizer,并使用自定义过滤器生成一个jar文件并使用它。