在 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
field2
的 edismax
解析器
现在当我使用 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 进行解析。
我的架构中有两个字段:
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
field2
的 edismax
解析器
现在当我使用 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 进行解析。