如何配置ElasticSearch以增加单字符串之间的模糊性

时间:2018-05-16 15:44:53

标签: 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发现:

  • 其他用户除了共享完全相同的标题(即:开发人员)

  • 用户而非共享一个词(即:web开发人员,ios开发人员)

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

  • 开发人员和开发

  • 调酒师和理发师(如果分享了很多信件,弹性不关心)

你知道我怎样才能提高弹性的耐受性? 我可以使用模糊查询,但它看起来很hacky。

1 个答案:

答案 0 :(得分:0)

为了能够找到devdeveloperbartenderbarber之间的对应关系,可以尝试运行prefix queries

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

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