ElasticSearch 6.2:从MySQL自动完成搜索

时间:2018-05-16 14:35:53

标签: mysql node.js express elasticsearch logstash

首先,我想说我使用的是Elasticsearch和Logstash 6.2,并且由于大的更新,很多主题都不兼容。在我发帖之前,我看了两次。 :)

我使用MySQL作为数据库,使用Logstash 6.2和JDBC,我在Elasticsearch 6.2中自动传输我的行。这一切都很好!

但是,我正在尝试将Elasticsearch用作Node / Express项目中的搜索引擎。我想创建一个自动填充搜索栏,如本教程Leveraging the Power of Elasticsearch: Autocomplete and Fuzzy Search中所述。

问题是我无法启用自动完成,因为从MySQL加载的数据是字符串而不是完成类型:

  

Illegal_argument_exception,原因:字段[extid]不是完成建议字段,状态:400

所以对于 getSuggestions 函数,我试试这个:

function getSuggestions(text, size){
   return elasticClient.search({
   index: indexName,
   type: indexType,
   body: {
       suggest: {
           extidSuggester: {
               text: text+'~',
               term: {
                   field: "extid",
                   size: size
               }
           },
           nameSuggester: {
               text: text+'~',
               term: {
                   field: "name",
                   size: size
               }
           }
         }
       }
  });
}

这不会让我自动完成。

解决方案可能是过滤Logstash conf中的目标列并强制执行完成类型。有人知道如何执行该操作吗?

是否有其他解决方案来解决我的问题?

1 个答案:

答案 0 :(得分:0)

我终于回答了自己。

当我创建映射时,我使用github上的默认映射。

我在此映射中添加了所需字段的完成类型,并解决了我的问题。

这很简单!