【问题标题】:Elasticsearch - how to fuzzy match phrase when search keyword has no spaces?Elasticsearch - 当搜索关键字没有空格时如何模糊匹配短语?
【发布时间】:2016-07-15 17:27:10
【问题描述】:

我想通过关键字brownfox 搜索来匹配字段title 的值为brown fox 的文档。

尝试此fuzzy 查询时,我没有得到任何结果:

curl -XGET 'http://localhost:9200/haystack/_search?pretty' -d '{
    "query" : {
        "fuzzy" : {
            "title": {
                "value": "brownfox",
                "fuzziness": 2,
                "prefix_length": 0,
                "max_expansions": 10000
            }
        }
    }
}'

我还尝试了 match 模糊查询和运算符 and

curl -XGET 'http://localhost:9200/haystack/_search?pretty' -d '{
    "query": {
      "match": {
        "title": {
          "query":     "brownfox",
          "fuzziness": "AUTO",
          "operator":  "and"
        }
      }
    }
}'

这将返回具有相似关键字的结果,但不返回标题为 brown fox 的文档,我认为这是更好的匹配。

我还阅读了this SO 问题的答案,但我没有选择使用同义词更新字段分析器,因为我也想匹配其他类似情况,包括缺少空格和错误-拼写单词。

谢谢!

【问题讨论】:

  • title 字段的映射是什么。它至少应该有一个分析器,可以将“棕狐”作为一个术语。如果它使用standard 分析器或任何不保持brown fox 整体的东西,您将无法匹配。
  • 是的,恐怕我可能不得不在有空格和没有空格的情况下对它进行索引。出于某种原因,我的印象是它会使用 Levenshtein 编辑距离进行匹配,我猜不是......
  • 它正在使用它,但它正在查看的术语是 brownfox。你想看看brown fox
  • 现在更有意义了,谢谢!

标签: elasticsearch django-haystack


【解决方案1】:

title 字段的映射至少应该有一个分析器,可以将"brown fox" 保留为单个术语。如果它使用standard 分析器或任何不保持brown fox 整体的东西,您将无法匹配。

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多