在 space 上用于关键字分词器拆分的具有多个词的 edismax

edismax with multiple words for keyword tokenizer splitting on space

我的架构中有两个字段:
field1 正在使用 keyword tokenizer filter 保留标记原样(甚至不划分在 space 上。我在分析选项卡中仔细检查过。)
field2 正在使用 WhitespaceTokenizerFactory 打破 space 和制表符上的单词等等

<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>

我正在使用默认 qf 值= field1 field2edismax 解析器
现在当我使用 q=hello world 查询时
在deugging模式下它显示它的查询像

rawquerystring:hello world

querystring: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) ()


我期望的是这样的:

expected:+(((field1:hello world) ((field2:hello) (field2:world))~1) ()


即对于 field1 它不应该中断对 space 的查询,因为它正在使用关键字分词器,而对于 field2 它应该中断对 space 的查询。 你能告诉我我做错了什么吗?

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