【发布时间】:2016-08-25 18:29:07
【问题描述】:
我正在尝试使用 Elasticsearch 实现对产品的简单搜索。
我遇到的一个问题是搜索查询通常包含隐含的术语。例如,考虑当有人输入“联想 thinkpad 电池”时,他们想要一块电池。但是,当有人只输入“lenovo thinkpad”时,他们想要一台笔记本电脑,即使该词没有出现在查询中。
我的解决方案如下。手动将一堆相关术语放在一起。例如,对于计算机/笔记本电脑类别,我可以使用术语“电池”、“键盘”、“电源线”、“适配器”、“电缆”、“保护计划”等。然后,只要没有这样的术语出现在搜索查询,我肯定会提升所有不包含这些字词的结果。
这可以通过 Elasticsearch 实现吗?
编辑:
示例文档
{"_source": { "item_title": "lenovo thinkpad white/black" },
"_source": { "item_title": "lenovo thinkpad battery" }
}
映射
{
"properties": {
"item_title": {
"type": "string"
}
}
}
查询
POST my_index/my_type/_search
{
"from": 0,
"size": 10,
"query": {
"match": {
"item_title": "lenovo thinkpad"
}
}
}
查询结果:
"hits": {
"total": 2,
"max_score": 0.2169777,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "2",
"_score": 0.2169777,
"_source": {
"item_title": "lenovo thinkpad battery"
}
},
{
"_index": "my_index",
"_type": "my_type",
"_id": "1",
"_score": 0.2169777,
"_source": {
"item_title": "lenovo thinkpad black/white"
}
}
]
}
请注意,这两个结果的分数是相同的。但是,由于查询“lenovo thinkpad”不包含我手动选择的那些特殊术语之一,例如“battery”,我希望不包含该术语的文档被积极提升,以便文档与"item_title": "lenovo thinkpad white/black" 在查询结果中应该有更高的分数。
【问题讨论】:
-
请考虑添加查询和映射以供参考,以更有效地了解您的问题
-
@user3775217 完成
标签: elasticsearch