我的模式中有两个字段:
field1正在使用keyword标记器过滤器来保留标记原样(甚至不按空间划分。我在分析选项卡中仔细检查了它。)
field2正在使用WhitespaceTokenizerFactory它破坏空格和选项卡等上的单词。
<field name="field1" type="field1_type" indexed="true" stored="false"/><field name="field2" type="field2_type" indexed="true" stored="false"/><fieldType name="field2_type" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory" /> </analyzer> <analyzer type="query"> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> </analyzer> </fieldType>
我正在使用edismax默认qf值=的解析器field1 field2
现在当我q=hello world
在调试模式下查询时,它显示它的查询就像
原始查询字符串:你好世界
查询字符串:hello world parsedquery :(+((DisjunctionMaxQuery((field1:hello | field2:hello)) DisjunctionMaxQuery((field1:world | field2:world)))~1) ())/no_coord
parsedquery_toString :+(((field1:hello | field2:hello) (field1:world | field2:world))~1) ()
我所期望的是这样的:
预期:+(((field1:hello world) ((field2:hello) (field2:world))~1) ()
即因为field1它不应该破坏空间查询,因为它正在使用关键字标记器,而它应该破坏空间查询field2。你能告诉我我做错了什么吗?