【问题标题】:Keyword match(Exact Match) in Elasticsearch ignoring the order of keywordsElasticsearch中的关键字匹配(精确匹配)忽略关键字的顺序
【发布时间】:2019-08-22 14:43:37
【问题描述】:

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

        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 的匹配,这是不可取的。所以我正在寻找一种可以与关键字一起使用但可以处理单词顺序的分析器。到目前为止还没有取得任何成功,欢迎来自社区的任何想法。

提前谢谢!!!!

【问题讨论】:

    标签: elasticsearch elastic-stack


    【解决方案1】:

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

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

    这里的关键元素:

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

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

    还有查询:

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

    正如我所说,您看到的3 需要在 Elasticsearch 之外通过“查看”搜索的文本来计算。

    【讨论】:

    • 感谢您的回复,虽然我能够达到预期的回复,但正如您所说,我仍然觉得它并不理想。需要找到一些不同的逻辑或在后端工作来处理这个问题。虽然会接受答案。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2020-05-18
    • 2015-03-03
    相关资源
    最近更新 更多