我告诉模糊查询这个文件几乎不是一个好主意Found-fuzzy所以我不知道这样做的最佳方法是什么.1074573_
我的例子是一个包含'蝙蝠侠'的电影名称 . 但是,用户键入'bat man'(带空格) . 这对模糊查询应该找到蝙蝠侠是有意义的 . 它也应该找到像蜘蛛侠这样的其他变种,但是现在我猜是好的 . (不是真的,但......)
所以模糊搜索实际上返回的结果比下面的匹配结果更多 . 有任何想法吗?
- 模糊:
{
"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
}
}
}
EDIT
我正在添加返回的示例 .
首先,即使添加了高模糊性值,也不会使用匹配查询返回任何内容(模糊:5)
但我确实使用模糊查询获得了几个“蝙蝠侠”相关的 Headers ,如“蝙蝠侠”或“蝙蝠侠返回” .
当我使用模糊搜索对'蝙蝠侠'进行多次模糊搜索时,这甚至更加奇怪...如果我搜索我的'主演'字段,除了 Headers 字段,(主演包含演员列表),我得到'杰森贝特曼以及“蝙蝠侠”这个称号 .
{
"_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"
]
}
}
BEST SO FAR (仍然不是很好)
我发现到目前为止效果最好的是结合两个查询 . 这似乎是多余的,但我还不能让一个像另一个一样工作 . 所以,这似乎更好:
"should": [
{
"fuzzy": {
"title": {
"boost": 6.0,
"min_similarity": 1.0,
"value": "batman"
}
}
},
{
"match": {
"title": {
"query": "batman",
"boost": 6.0
,"fuzziness": 1
}
}
}
]
1 回答
弹性搜索分析文档并将其转换为术语,这些术语实际上是搜索的(而不是文档本身) . 两种查询类型之间的主要区别在于匹配查询在发送查询之前不会分析查询文本 . 所以请考虑以下示例:
在模糊搜索中搜索“蝙蝠侠”首先会对该术语进行标记,然后进行搜索 . 所以它真正寻找的是'btmn',它可能不会出现相同的匹配 . 一个很好的例子是Jason Bateman如何出现,因为姓氏被标记为btmn或类似的形式 .
有关搜索时分析文本字段的更多详细信息,请参阅http://exploringelasticsearch.com/searching_data.html#sec-searching-analysis