Elasticsearch:获取具有最小匹配百分比的文档

时间:2017-09-15 12:15:08

标签: elasticsearch

考虑我已经索引了两个索引文件:

[
    {
        "name": "John Doe"
    },
    {
        "name": "John A"
    }
]

单词John的匹配百分比分别为50和66.7,分别为第一个和第二个文档的字段name

现在的问题是,我怎样才能找到匹配百分比大于X的所有匹配项,其中0<=X<=100。匹配应始终为前缀匹配。

2 个答案:

答案 0 :(得分:0)

我认为这样做的唯一方法是在过滤器中使用enable fielddata on your field来确定字段的最小长度(您可以使用百分比和字词长度计算它):

{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            // Your name: 'John' match
            {
              "script": {                    
                "script": {  
                  "params": {
                    "min_size": 4
                  },
                  // In ES <5.6 versions, use "inline" instead of "source"
                  "source": "doc['name'].values.length() > params.min_size" 
                }
              }
            }
          ]
        }
      }
    }
  }
}

但你必须{{3}}。

答案 1 :(得分:0)

虽然您可以使用脚本编写这样的内容(如Julien TASSIN所述),但这不是您想要的:

  1. 除非您有过滤条件或数据非常少,否则这将会很慢,因为Elasticsearch需要为每次搜索做一些繁重的计算。
  2. Elasticsearch通常使用令牌。虽然您可以使用脚本执行很多操作,但您的用例听起来好像要么使用错误,要么Elasticsearch可能不太合适;虽然我不知道任何其他系统能够很好地满足这一特定要求。