Elasticsearch中的关键字匹配(完全匹配)忽略关键字的顺序

Keyword match(Exact Match) in Elasticsearch ignoring the order of keywords

我正在处理一个用例,在该用例中,我只需要完全匹配,但单词可以按任何顺序排列。 示例:-

        Searching with Text :- Quick Brown Fox 
        Should Match with :- 
          - Quick Brown Fox (Can Achieve with analyzer Keyword)
          - Brown Quick Fox
          - Fox Quick Brown
        Shouldn't Match with :-
          - Brown Quick Fox Rocky
          - My Brown Quick Fox Rocky

如果我尝试使用 slop 0 匹配,问题是我也得到了与 Brown quick Fox Rocky 的匹配,这是不可取的。所以我正在寻找一个可以与关键字一起使用但可以处理单词顺序的分析器。到目前为止,还没有取得任何成功,欢迎来自社区的任何想法。

提前致谢!!!!

不太理想,但我认为它可以完成工作。

{
  "mappings": {
    "properties": {
      "text": { 
        "type": "text",
        "analyzer": "whitespace",
        "fields": {
          "length": { 
            "type":     "token_count",
            "analyzer": "whitespace"
          }
        }
      }
    }
  }
}

这里的关键要素:

  • whitespace分析器(因为这是我在你的测试数据中看到的;如果你有一些其他的规则,你需要改变这个)
  • token_count 子字段的类型,在索引时索引来自该特定字段的标记数

然后,在搜索时,我们的想法是搜索您的文本以匹配所有术语,并且让标记的长度等于索引的标记。不理想,我说,因为搜索文本中的令牌数量需要在 运行 查询之前计算并放在查询中。如果使用一个简单的分析器——比如 whitespace 一个——你可以在 Elasticsearch 之外使用某种简单的分词器(取决于你使用的 application/language)来实现这个并计算分词的数量。

以及查询:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "text": {
                            "query":"Quick Brown Fox",
                            "operator": "and"
                        }
                    }
                },
                {
                    "term": {
                        "text.length": 3
                    }
                }
            ]
        }
    }
}

正如我所说,您看到的 3 需要在 Elasticsearch 外部由 "looking" 在搜索文本中计算。