edismax带有多个单词,用于在空间上拆分关键字分词器



我的架构中有两个字段:
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) ()


我所期望的是这样的:

预期 :+((字段 1:hello world) ((字段 2:hello) (字段 2:world))~1) ()


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

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

最新更新