3 full-text-search elasticsearch
我是一个ElasticNoob,但我一直在玩一些简单的短语匹配,如下所示:
query: {
match_phrase: {
my_field: {
query: "silly dogs playing about",
slop: 100
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这仅匹配具有所有 4个术语的条目(愚蠢,狗,玩,约).理想情况下它仍然匹配像"正在玩的傻狗"之类的东西,它没有"约"关键字(因此会得到较低的分数).
这似乎是文本搜索引擎的一个非常常见的用例,所以我认为我的Google-fu必须是弱的,因为我在弹性搜索中找不到关于部分短语匹配的任何内容.
有人能指出我在正确的方向吗?只是要清楚:
match_phrase并slop允许我们这样做)match_phrase简单排除如果项目的任何关键字丢失-这是不理想的我的情况)谢谢!
推荐的解决方案是:
我们不是将邻近匹配作为绝对要求,而是将其用作信号 - 作为潜在的许多查询之一,每个查询都有助于每个文档的总体得分(请参阅大多数字段).
在这里您有描述它的文章:https://www.elastic.co/guide/en/elasticsearch/guide/current/proximity-relevance.html
所以你的查询看起来像:
query: {
bool: {
must: {
match: {
my_field: {
query: "silly dogs playing about",
minimum_should_match: "30%"
}
}
},
should: {
match_phrase: {
my_field: {
query: "silly dogs playing about",
slop: 50
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |