我有多个索引,我希望从中获得建议,但是我想根据它们来自的索引来对建议进行评分/排序。我已经成功地提高了基于索引的搜索量(使用indexs_boost),但这似乎对建议不起作用。我尝试过类似的事情:
GET index1,index2/_search
{
"indices_boost" : [
{ "index1" : 9 },
{ "index2" : 1 }
],
"suggest": {
"mySuggest":{
"text":"someText",
"completion": {
"field":"suggestField",
"size":6
}
}
}
}
这可行吗?
此刻,我依靠代码对建议进行排序。
答案 0 :(得分:1)
我相信您可以尝试在context suggester中使用类别提升来实现所需的行为。您需要在每个建议文档中附加一个特殊的类别字段,该字段可以与索引名称完全相同。
category
上下文来增强建议映射可能看起来像这样:
PUT food
{
"mappings": {
"properties" : {
"suggestField" : {
"type" : "completion",
"contexts": [
{
"name": "index_name",
"type": "category"
}
]
}
}
}
}
出于演示目的,我将创建另一个索引,与上面的索引完全相同,但名称为movie
。 (索引名称可以是任意的。)
让我们添加建议文档:
PUT food/_doc/1
{
"suggestField": {
"input": ["timmy's", "starbucks", "dunkin donuts"],
"contexts": {
"index_name": ["food"]
}
}
}
PUT movie/_doc/2
{
"suggestField": {
"input": ["star wars"],
"contexts": {
"index_name": ["movie"]
}
}
}
现在我们可以运行带有增强功能的建议查询:
POST food,movie/_search
{
"suggest": {
"my_suggestion": {
"prefix": "star",
"completion": {
"field": "suggestField",
"size": 10,
"contexts": {
"index_name": [
{
"context": "movie",
"boost": 9
},
{
"context": "food",
"boost": 1
}
]
}
}
}
}
}
这将返回如下内容:
{
"suggest": {
"my_suggestion": [
{
"text": "star",
"offset": 0,
"length": 4,
"options": [
{
"text": "star wars",
"_index": "movie",
"_type": "_doc",
"_id": "2",
"_score": 9.0,
"_source": ...,
"contexts": {
"index_name": [
"movie"
]
}
},
{
"text": "starbucks",
"_index": "food",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": ...,
"contexts": {
"index_name": [
"food"
]
...
indices_boost
为什么不起作用?似乎indices_boost
参数只影响搜索,不建议。 _suggest
曾经是一个独立的端点,但was deprecated可能是造成混淆的原因。
希望有帮助!