我的架构中有一些字段如下:
hotel_name:一些酒店名称
城市:某个城市county_code:DE
街道:街道。我查找一些酒店的查询看起来像这样。
select/fq=city:"Berlin"&fq=country_code"DE"&fq=hotel_name:"achat berlin hotel"=city:"Berlin"&fq=country_code"DE"&fq=hotel_name:"achat berlin hotel"
返回值,在hotel_name字段中添加了一些或多个令牌的许多酒店。如果我想简短,这些文件是在hotel_name文件中匹配的每个令牌的数量,我该怎么做。我想在顶部的hotel_name字段中保留最大匹配令牌数。
E.G。如果酒店名称共有三个代币:achat,berlin和hotel,它应该出现在顶部。下面的匹配应该出现在下面。
是否可以根据每个字段匹配的令牌数量对文档进行评分。
答案 0 :(得分:2)
好吧,首先,您的查询形成不良。您需要使用?
启动查询,提供q
参数,在:
字段名称和值之间提供country_code
,而您不需要重复fq
个参数。它应该是:
?q=*:*&fq=city:"Berlin"&fq=country_code:"DE"&fq=hotel_name:"achat berlin hotel"
hotel_name
,country_code
和city
这些fq
参数将根据您的schema.xml
进行标记和分析,并且可能完全匹配或不匹配,具体取决于您在solrconfig.xml
中指定的查询slop。
是否可以根据数量对文档进行评分 每个字段匹配的令牌。
solr中的得分不是这个字面值,所以不,不完全是。
E.G。如果酒店名称共有三个代币:achat,berlin和hotel, 它应该出现在顶部。下面的匹配应该出现在下面。
您已将查询作为短语提供(它引用了"
s),因此solr默认会找到该确切的短语,并为其指定相关分数。如果在qs
中配置了query slop(solrconfig.xml
参数),则还会添加来自草率查询的分数。你真正想要的是:
hotel_name:achat berlin hotel
这是一个非短语查询。
答案 1 :(得分:0)
schema.xml中字段“hotel_name”的类型是什么?
另外,你已经试过了吗?默认情况下,Solr会考虑协调因素:
“如果查询中有多个字词,匹配的字词越多,得分就越高”。所以,我猜你的情况已经发生了。