我想使用elasticSearch中的context suggester,但我的建议结果需要匹配2个上下文值。
从文档中扩展示例,我想做类似的事情:
POST place/_search?pretty
{
"suggest": {
"place_suggestion" : {
"prefix" : "tim",
"completion" : {
"field" : "suggest",
"size": 10,
"contexts": {
"place_type": [ "cafe", "restaurants" ],
"rating": ["good"]
}
}
}
}
}
我希望结果具有背景' cafe'或者'餐厅'对于place_type和具有上下文' good'评级。
当我尝试这样的事情时,弹性对上下文执行OR操作,给我所有建议与上下文' cafe',restaurant'或者好的'。
我可以以某种方式指定BOOL操作符弹性需要用于组合多个上下文吗?
答案 0 :(得分:1)
Elasticsearch 5.x以后似乎不支持此功能: https://github.com/elastic/elasticsearch/issues/21291#issuecomment-375690371
您最好的选择是创建一个composite context
,这似乎是Elasticsearch 2.x如何在查询中实现多个上下文的方法:
https://github.com/elastic/elasticsearch/pull/26407#issuecomment-326771608
为此,我想您需要在映射中添加一个新字段。我们称之为cat-rating
:
PUT place
{
"mappings": {
"properties": {
"suggest": {
"type": "completion",
"contexts": [
{
"name": "place_type-rating",
"type": "category",
"path": "cat-rating"
}
]
}
}
}
}
索引新文档时,您需要将place_type
和rating
字段合并在一起,用-
隔开,cat-rating
字段。
完成后,您的查询将需要如下所示:
POST place/_search?pretty
{
"suggest": {
"place_suggestion": {
"prefix": "tim",
"completion": {
"field": "suggest",
"size": 10,
"contexts": {
"place_type-rating": [
{
"context": "cafe-good"
},
{
"context": "restaurant-good"
}
]
}
}
}
}
}
这将返回有关咖啡馆或餐馆的建议。