【发布时间】:2017-04-03 16:57:30
【问题描述】:
我有一个字段类型定义如下:
<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="2"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="2"/>
</analyzer>
我想查询这个类型的一个字段(名为passage_body)如下(例如):
q=passage_body:(DPGC召集人任期)
问题是在索引该字段中的文本时,分析器工作得很好。但是,在查询时,如果我将 debugQuery 参数设置为 true,我可以看到该字段未按预期进行分析(未形成带状疱疹)。这是调试输出:
<str name="rawquerystring">passage_body:(the term of dpgc convener)</str><str name="querystring">passage_body:(the term of dpgc convener)</str><str name="parsedquery">passage_body:term passage_body:dpgc passage_body:convener</str><str name="parsedquery_toString">passage_body:term passage_body:dpgc passage_body:convener</str>
当我在 Solr admin 中分析查询时,输出符合预期。 我什至尝试将 Standard Query Parser 的“sow”查询参数设置为 false,但即使这样也没有用。
简而言之,这是我的最终查询:
http://localhost:8983/solr/mnitdocs/select?q=passage_body:(the term of dpgc convene)&sow=false&debugQuery=true
简而言之,我想将查询的带状疱疹与通道主体的带状疱疹相匹配。 请提出方法。由于我是 Solr 的新手,因此也欢迎其他建议。
我正在使用 Solr 5.3.1。
【问题讨论】:
-
只是一个猜测,但您是否尝试过对整个 q= 有效负载进行 url 编码:passage_body%3A(the%20term%20of%20dpgc%20convene)
-
你能发布一个你希望如何解析查询字符串的例子吗?
-
我希望将查询字符串作为“DPGC 召集人的任期”传递。我使用引号来表示它是单个字符串,而不是短语。现在分析器应该处理这个字符串(标记,制作带状疱疹)。
标签: solr