【问题标题】:ElasticSearch - Searching for exact text match without keeping two copies in index?ElasticSearch - 搜索精确的文本匹配而不在索引中保留两个副本?
【发布时间】:2015-02-12 11:59:35
【问题描述】:

如果字段映射包含 "index" : "not_analyzed",则 ElasticSearch 支持文本的精确匹配。这样,该字段将不会被标记化,ES 将使用整个字符串进行精确匹配。 The Documentation

有没有一种方法可以同时支持全文搜索和精确匹配,而无需创建两个字段:一个用于全文搜索,一个用于精确匹配not_analyzed 映射?

一个示例用例:

我们想按书名搜索。

  • I like trees应该返回全文搜索的结果

  • exact="I like trees" 应该只返回具有确切标题 I like trees 的书籍,而不返回其他任何内容。不区分大小写很好。

【问题讨论】:

    标签: node.js elasticsearch full-text-search


    【解决方案1】:

    您可以使用term 过滤器进行完全匹配搜索

    过滤器看起来像这样

    {
       "term" {
           "key" : "value"
       }
    }
    

    查询如下所示:

    {
        "query" : {
            "filtered" : {
                "filter" : {
                    "term" : { 
                        "key" : "value"
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 是的,只有在映射设置为not_analyzed 时才有效,但这意味着我必须创建两个字段?一个是全文,一个不是?我在问是否有办法避免这样做。
    【解决方案2】:

    您不需要将数据存储在两个不同的字段中,您想要的是一个 ES 多字段。

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_multi_fields.html#_multi_fields

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多