【发布时间】:2014-08-13 17:06:12
【问题描述】:
我试图弄清楚为什么以下查询会产生截然不同的结果。有人告诉我,根据本文档Found-fuzzy,模糊查询几乎不是一个好主意,所以我尝试使用带有模糊参数的匹配查询。它们产生截然不同的结果。我不确定这样做的最佳方法是什么。
我的示例是包含“蝙蝠侠”的电影标题。但是,用户键入“蝙蝠侠”(带有空格)。模糊查询应该找到蝙蝠侠是有道理的。它还应该找到像蜘蛛侠这样的其他变体,但我想现在没关系。 (不是真的,但是...)
所以模糊搜索实际上返回的结果比下面的匹配结果更相关。有什么想法吗?
--模糊:
{
"query":{
"bool":{
"should": [
{
"fuzzy": {
"title": {
"value": "bat man",
"boost": 4
}
}
}
], "minimum_number_should_match": 1
}
}
}
--匹配:
{
"query":{
"bool":{
"should": [
{
"match": {
"title": {
"query": "bat man",
"boost": 4
}
}
}
], "minimum_number_should_match": 1
}
}
}
编辑
我正在添加返回的示例。
首先,使用匹配查询不会返回任何内容,即使添加了很高的模糊度值(模糊度:5)
但我确实使用模糊查询获得了几个与“蝙蝠侠”相关的标题,例如“蝙蝠侠”或“蝙蝠侠归来”。
当我使用模糊搜索对“蝙蝠侠”进行多次模糊搜索时,这变得更加奇怪......如果我搜索我的“主演”字段,除了标题字段(主演包含演员列表),我获取 'jason bateman' 以及标题 'batman'。
{
"_index": "store24",
"_type": "searchdata",
"_id": "081227987909",
"_score": 4.600759,
"fields": {
"title": [
"Batman"
]
}
},
{
"_index": "store24",
"_type": "searchdata",
"_id": "883929053353",
"_score": 4.1418676,
"fields": {
"title": [
"Batman Forever"
]
}
},
{
"_index": "store24",
"_type": "searchdata",
"_id": "883929331789",
"_score": 3.5298011,
"fields": {
"title": [
"Batman Returns"
]
}
}
目前为止最好的(仍然不是很好)
到目前为止,我发现最有效的方法是将两个查询结合起来。这似乎是多余的,但我还不能像另一个一样工作。所以,这似乎更好:
"should": [
{
"fuzzy": {
"title": {
"boost": 6.0,
"min_similarity": 1.0,
"value": "batman"
}
}
},
{
"match": {
"title": {
"query": "batman",
"boost": 6.0
,"fuzziness": 1
}
}
}
]
【问题讨论】:
标签: solr lucene elasticsearch