elasticsearch,Node.js,Typescript,elasticsearch" /> elasticsearch,Node.js,Typescript,elasticsearch" />

Node.js Get suggest simple“短语查询值返回”;“未定义”;

Node.js Get suggest simple“短语查询值返回”;“未定义”;,node.js,typescript,elasticsearch,Node.js,Typescript,elasticsearch,如何从elasticsearch nodejs客户端获取建议的查询值 我有这样一个索引名为test: PUT test { "settings": { "index": { "number_of_shards": 1, "analysis": { "analyzer": { "trigram": { "type": "custom", "tokenizer": "standar

如何从elasticsearch nodejs客户端获取建议的查询值

我有这样一个索引名为test

PUT test
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "analysis": {
        "analyzer": {
          "trigram": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": ["lowercase","shingle"]
          },
          "reverse": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": ["lowercase","reverse"]
          }
        },
        "filter": {
          "shingle": {
            "type": "shingle",
            "min_shingle_size": 2,
            "max_shingle_size": 3
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "word": {
        "type": "text",
        "fields": {
          "trigram": {
            "type": "text",
            "analyzer": "trigram"
          },
          "reverse": {
            "type": "text",
            "analyzer": "reverse"
          }
        }
      }
    }
  }
}
并希望通过elasticsearch客户端通过以下方式获取建议。简单的\u短语值:

getElasticSearchResult: (_, params, context) =>
      new Promise((resolve, reject) => {
        const param: RequestParams.Search = {
          index: 'test',
          body: {
            suggest: {
              text: 'params.searchText',
              simple_phrase: {
                phrase: {
                  field: 'word.trigram',
                  size: 1,
                  gram_size: 3,
                  direct_generator: [
                    {
                      field: 'word.trigram',
                      suggest_mode: 'always',
                    },
                  ],
                  highlight: {
                    pre_tag: '<em>',
                    post_tag: '</em>',
                  },
                },
              },
            },
          },
        };
        client
          .search(param)
          .then((result: ApiResponse) => {
            resolve(result.body.suggest.simple_phrase);
            console.log('---- ', resolve(result.body));
            // keep results in array (allRecords)
          })
          .catch((err: Error) => {
            console.log(err);
            reject(err);
          });
      }).then(v => {
        return allRecords;
      }),
},
getElasticSearchResult:(\uUx、参数、上下文)=>
新承诺((解决、拒绝)=>{
常量参数:RequestParams.Search={
索引:'测试',
正文:{
建议:{
text:'params.searchText',
简单的短语:{
短语:{
字段:“word.trigram”,
尺寸:1,
克大小:3,
直流发电机:[
{
字段:“word.trigram”,
建议_模式:“始终”,
},
],
亮点:{
前标签:“”,
post_标记:“”,
},
},
},
},
},
};
客户
.search(参数)
.然后((结果:ApiResponse)=>{
解决(结果、正文、建议、简单短语);
log('---',resolve(result.body));
//将结果保存在数组中(所有记录)
})
.catch((错误:Error)=>{
控制台日志(err);
拒绝(错误);
});
}).然后(v=>{
返回所有记录;
}),
},
但是result.body是未定义的,为什么


请求正确,结果结构也正确,但内部所有内容都是空的。

您能检查一下请求对象中返回的内容吗?您是指RequestParams对象吗?我在这行中谈论的是请求对象resolve(result.body.suggest.simple_phrase)它是空的,只是未定义