代码之家  ›  专栏  ›  技术社区  ›  phenric

ElasticSearch 6.2:从MySQL自动完成搜索

  •  0
  • phenric  · 技术社区  · 7 年前

    首先,我想说的是,我使用的是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加载的数据是字符串,而不是完成类型:

    非法的\u argument\u异常,原因:字段[extid]不是完成建议字段,状态:400

    所以对于 获取建议 函数,我尝试以下操作:

    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 回复  |  直到 7 年前
        1
  •  0
  •   phenric    7 年前

    我终于回答了自己。

    创建映射时,我使用了上的默认映射 github .

    我在这个映射中添加了 完成 对于需要的字段,它解决了我的问题。

    就这么简单!