我正在使用 Solr 5.5,我有问题希望在这里找到解决方案。
我有一个使用以下设置创建的字段:
<field name="exactName_noAlias_en_US" type="text_exact_query_tokenized" indexed="true" stored="false"/>
<fieldtype name="text_exact_query_tokenized" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="10"/>
</analyzer>
</fieldtype>
该字段的值可以是:“Justin Bieber”
我的期望如下:
对于“艺术家贾斯汀·比伯是青少年万人迷”的查询,我希望它与此文档相匹配。像“一位名叫 Bieber Justin 的艺术家是加拿大人”或“Justin 这个名字很常见”这样的查询不应该找到匹配项。
我看到当我发出查询“Justin Bieber”时使用默认的“/select”请求处理程序找不到匹配项,即使它是完全匹配的。但是一个不同的字段被设置为'/select' RH 的默认字段,所以,我尝试使用以下 curl 创建另一个 RH:
curl http://localhost/solr/performer/config -H 'Content-type:application/json' -d '{"add-requesthandler" : {"name": "/exactName","class":"solr.SearchHandler","defaults":{ "echoParams":"explicit" ,"rows":10, "df":"exactName_noAlias_en_US", "q.op":"AND" },"useParams":"x"}}'
它创建了我想要的 RH,但我的查询仍然与所需的文档不匹配。
请提出解决此问题的方法。
下面是查询响应的“调试”部分的片段:“/exactName?q=exactName_noAlias_en_US:Justin%20Bieber&wt=json&indent=true&debug=true”
"debug":{
"rawquerystring":"exactName_noAlias_en_US:Justin Bieber",
"querystring":"exactName_noAlias_en_US:Justin Bieber",
"parsedquery":"+exactName_noAlias_en_US:justin +exactName_noAlias_en_US:bieber",
"parsedquery_toString":"+exactName_noAlias_en_US:justin +exactName_noAlias_en_US:bieber",
"explain":{},
以下是查询响应的“调试”部分的片段:“/select?q=exactName_noAlias_en_US:Justin%20Bieber&wt=json&indent=true&debug=true”
"debug":{
"rawquerystring":"exactName_noAlias_en_US:Justin Bieber",
"querystring":"exactName_noAlias_en_US:Justin Bieber",
"parsedquery":"+exactName_noAlias_en_US:justin +searchKeywords_en_US:bieber",
"parsedquery_toString":"+exactName_noAlias_en_US:justin +searchKeywords_en_US:bieber",
"explain":{},
下面是使用 /select RH 的短语查询响应的“调试”部分的片段:“/select?q=exactName_noAlias_en_US:"Justin%20Bieber"&wt=json&indent=true&debug=true
"debug":{
"rawquerystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"querystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"parsedquery":"MultiPhraseQuery(exactName_noAlias_en_US:\"(justin justin bieber) bieber\")",
"parsedquery_toString":"exactName_noAlias_en_US:\"(justin justin bieber) bieber\"",
"explain":{},
以下是使用 /exactName RH 的短语查询响应的“调试”部分的片段:“/exactName?q=exactName_noAlias_en_US:"Justin%20Bieber"&wt=json&indent=true&debug=true
"debug":{
"rawquerystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"querystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"parsedquery":"MultiPhraseQuery(exactName_noAlias_en_US:\"(justin justin bieber) bieber\")",
"parsedquery_toString":"exactName_noAlias_en_US:\"(justin justin bieber) bieber\"",
"explain":{},
以下是查询和相应的调试部分,查询中的空格已转义:
select?q=Justin\ Beiber&df=exactName_noAlias_en_US
调试:
"rawquerystring":"Justin\\ Beiber",
"querystring":"Justin\\ Beiber",
"parsedquery":"+((exactName_noAlias_en_US:justin exactName_noAlias_en_US:justin beiber)/no_coord) +exactName_noAlias_en_US:beiber",
"parsedquery_toString":"+(exactName_noAlias_en_US:justin exactName_noAlias_en_US:justin beiber) +exactName_noAlias_en_US:beiber",
"explain":{},