首页 > 解决方案 > 如何配置 ElasticSearch 以增加单字字符串之间的模糊性

问题描述

我正在制作一个带有聊天功能的专业社交应用程序。我想建议用户添加为朋友。这些建议仅基于标题:开发人员、建筑师、歌手......

当前的弹性查询过于选择性,因此我缺乏建议:

query: {
    bool: {
        must_not: {
            ids: {
                values: _usersToIgnore
            }
        },
        should: [
            {
                match: {
                    titlePhrase: {
                        query: title,
                        minimum_should_match: '90%',
                        boost: 2
                    }
                }
            }
        ],
        minimum_should_match: 1
    }
}

我试图降低minimum_should_match但它并没有改变什么,我想弹性匹配单词而不是字母。

弹性映射是:

titlePhrase: {
    type: 'text',
    analyzer: 'phrase_analyzer',
    search_analyzer: 'phrase_analyzer'
}

(我对分析仪一无所知,制作此映射的不是我)

在我的大多数情况下,标题只是一个词。所以 Elastic 发现:

但它没有找到任何对应关系:

你知道我怎样才能增加弹性的耐受性吗?我可以玩模糊查询,但它似乎很hacky。

标签: elasticsearch

解决方案


为了能够找到和之间的对应关系,可以dev尝试运行前缀查询developerbartenderbarber

{ 
  "query": {
    "prefix" : { "titlePhrase" : "dev" }
  }
}

这将允许相同前缀之间的匹配。


推荐阅读