Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr-如何编写查询表达式;查询分析器生成的每个标记都必须出现;_Solr_Lucene - Fatal编程技术网

Solr-如何编写查询表达式;查询分析器生成的每个标记都必须出现;

Solr-如何编写查询表达式;查询分析器生成的每个标记都必须出现;,solr,lucene,Solr,Lucene,我使用的是Solr4.7。我的索引有一个字段“text” 如果我输入查询 text:T1T2T3 假设T1T2T3的分析器输出是token1=T1 token2=T2 token3=T3(文本语言不使用空格分割单词),则查询将解析为 text:T1 text:T2 text:T3 +text:T1 +text:T2 +text:T3 所以,如果一个字段包含T1、T2或T3中的任何一个,它就会出现在搜索结果中 我想要的是,如果一个字段包含T1、T2和T3,它就会出现在搜索结果中 换句话说

我使用的是Solr4.7。我的索引有一个字段“text”

如果我输入查询

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

text:T1 text:T2 text:T3 
+text:T1 +text:T2 +text:T3 
所以,如果一个字段包含T1、T2或T3中的任何一个,它就会出现在搜索结果中

我想要的是,如果一个字段包含T1、T2和T3,它就会出现在搜索结果中

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

text:T1 text:T2 text:T3 
+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,这意味着查询分析器生成的每个标记都必须出现?谢谢。

您可能需要为此编写您自己的自定义CJK标记器

我本来打算建议使用NGram tokeniser,但它会生成所有的组合,比如:“BC”、“DE”等等


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

让我解释一下我的问题。假设我的分析器正确地拆分单词。我有一个问题:ApacheLucene。和三个文档:Apache/Lucene/LuceneJavaApache。我所期望的是搜索结果只包含LuceneJavaApache。我认为可能您需要在应用程序中解析查询并按照您想要的方式生成查询,但我不知道solr功能可以为您做到这一点。除非您想用java实现自己的查询解析器插件,否则这将有点复杂。