如何使用elasticsearch在市场上进行智能(简单)搜索?



我还在学习弹性,很多东西对我来说都是不清楚的,包括这个例子:假设我有像amazon/any这样的市场(许多产品有许多子选项和城市可用性)。我想用elastic来搜索字符串字段。例如,我想在都柏林搜索"指环王"汇编;而elastic应该只返回都柏林可用的《指环王》丛书。

我可以将文档放入任何模式(仅用于搜索)。

现在我有了这个弹性模式(从prod数据库编译数据):

[
{
"name": "lord of rings",
"seller": "Home Production",
"availability": [
{
"city": "dublin",
"category": "book",
"types": [
"one book",
"compilation"
]
},
{
"city": "london",
"category": "book",
"types": [
"one book",
"compilation"
]
}
]
},
{
"name": "lord of rings",
"seller": "Some",
"availability": [
{
"city": "dublin",
"category": "book",
"types": [
"one book",
"compilation"
]
},
{
"city": "london",
"category": "book",
"types": [
"one book",
"compilation"
]
},
{
"city": "dublin",
"category": "dvd",
"types": [
"disk"
]
}
]
}
]

这是一个非常抽象的例子。为了便于搜索,我们可以以任何方式格式化数据模式。搜索城市总是已知的(它不是文本查询的一部分)。困难在于,一个卖家,一种产品,有许多城市的可用性,在每个城市,我们都知道"选项";可用性(例如,一本书或整个收藏)我不知道如何更详细地描述它,或者如何在谷歌上正确地找到它。我试过multi_match,但它给出了错误的答案,如果我想要"指环王dvd在都柏林"。他建议第一份文件与我更相关,尽管事实上第二份文件才是正确的答案。

相关性问题不容易解决,有时如果使用multi-match来增强城市字段可能会得到更好的结果。无论如何,你需要学习更多来理解你的场景,并使你想要的文档更相关。

我建议你阅读《相关搜索》这本书,它将帮助你理解为什么有些结果不像你想要的那样相关。

最新更新