我的模式中有两个字段:
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
。你能告诉我我做错了什么吗?