我正在尝试使用Elasticsearch实现一个简单的产品搜索。
我遇到的一个问题是,搜索查询通常都有隐含的术语。例如,当有人输入"lenovo thinkpad battery“时,他们想要一块电池。然而,当有人只输入"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“不包含我手动挑选出的特殊术语之一,如”电池“,我希望不包含该术语的文档为正增强,因此具有"item_title":"lenovo thinkpad白/黑”的文档在查询结果中应该有较高的分数。
发布于 2016-08-26 03:42:56
如果我在我的Wikipedia索引中执行以下查询
GET /_search
{
"query": {
"query_string": {
"query": "(Darmstadt)^10 (NOT School)^8",
"fields": [
"title^3"
],
"phrase_slop": 3,
"use_dis_max": true
}
}
}我仍然把达姆施塔特学院排在了后面(它通常排在前10名)
如果我执行以下查询
GET /_search
{
"query": {
"query_string": {
"query": "(Darmstadt AND SCHOOL )^10 (NOT School)^8",
"fields": [
"title^3"
],
"phrase_slop": 3,
"use_dis_max": true
}
}
}我得到了达姆施塔特学校作为第一个结果,尽管它在NOT子句中。所以我建议你做一些类似的事情。
https://stackoverflow.com/questions/39152401
复制相似问题