带有多个单词的edismax,用于关键字标记器在空间上分割

时间:2015-01-06 08:57:43

标签: solr lucene solrcloud solr4j

我的架构中有两个字段:
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查询时
在deugging模式下,它显示其制作查询如

  

rawquerystring :hello world

     

querystring :你好世界    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,它不应该破坏空间查询,因为它使用关键字tokenizer,而它应该打破field2的空间查询。 你能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

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