弹性搜索嵌套对象自动完成

时间:2019-02-20 13:52:57

标签: java elasticsearch

我正在尝试向在弹性搜索中创建的嵌套对象添加自动完成功能。

我设置的映射设置:

"mappings": {
    "doc": {
        "object": {
            "type": "nested",
            "properties": {
                "author": {
                    "type": "text",
                    "analyzer": "hebrew"
                },
                "content": {
                    "type": "text",
                    "analyzer": "hebrew"
                },
                "title": {
                    "type": "text",
                    "analyzer": "hebrew"
                }, 
                "suggest" : { "type": "completion"}
            }
       }
   }
}

我使用的是嵌套对象,因为我还使用fscrawler将json文档添加到索引中。

我使用以下查询:

{
    "suggest": {
        "suggester" : {
            "prefix" : "test", 
            "completion" : { 
                "field" : "object.suggest"
            }
        }
    }
}

但是问题是,无论我输入什么类型,我都没有结果。

我是否正确设置了映射?还是查询错误?

1 个答案:

答案 0 :(得分:0)

最后对我有用的是为每个要使用自动建议的对象字段使用一个建议子字段,例如,如果我要对“作者”和“标题”字段使用自动建议,那么我d使用:

theBoard = {'top-L': 'O', 'top-M': 'O', 'top-R': 'O', 'mid-L': 'X', 'mid-M':'X', 'mid-R': ' ', 'low-L': ' ', 'low-M': ' ', 'low-R': 'X'}

def printBoard(board):
   print(board['top-L'] + '|' + board['top-M'] + '|' + board['top-R'])
   print('-+-+-')
   print(board['mid-L'] + '|' + board['mid-M'] + '|' + board['mid-R'])
   print('-+-+-')
   print(board['low-L'] + '|' + board['low-M'] + '|' + board['low-R'])
printBoard(theBoard)

要使用它,我将使用文档中的建议者来搜索字段“ object.title.suggest”。