1

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

4

1 回答 1

2

您需要转义查询中的空格(在术语周围使用反斜杠或引号) - 查询解析器不会根据每个字段的分析器/标记器进行解析。

于 2015-01-06T11:48:07.333 回答