【问题标题】:Elastic search match_phrase_prefix not able to find all records弹性搜索 match_phrase_prefix 无法找到所有记录
【发布时间】:2014-10-18 13:49:17
【问题描述】:

我们使用的是弹性搜索 1.1.0。我们正在尝试使用 match_phrase_prefix 查询索引,如下所示:

{
    "query":{
      "match_phrase_prefix" : {
        "name" : {
          "query" : "Harry Joy"
        }
      }
    }
}

我们有 4 条名为 Harry Joy 的记录。如果我们写全名,上面的查询可以完美运行,但是如果我们写名字和姓氏的第一个字符,它只返回 1 条记录而不是 4 条。

以下查询仅返回 1 条记录:

{
    "query":{
      "match_phrase_prefix" : {
        "name" : {
          "query" : "Harry J"
        }
      }
    }
}

但以下查询返回所有 4 条记录:

{
    "query":{
      "match_phrase_prefix" : {
        "name" : {
          "query" : "Harry Jo"
        }
      }
    }
}

我们还需要能够在第二个单词中使用单个字符搜索所有 4 个字符。我们可以在这里做些什么来使它工作,不只使用 1 个字符进行搜索而在第二个单词中使用 2 个字符的原因是什么?

这就是我创建索引的方式:

{
    "river": "users", 
    "data": {
        "type": "mongodb", 
        "mongodb": { 
           "servers": [
                   { "host": "localhost", "port": 27017 }
             ],
            "db": "mydb", 
            "collection": "users", 
            "gridfs": false
        }, 
        "index": { 
            "name": "susers", 
            "type": "users" 
        }
    }
}

【问题讨论】:

  • 'Harry J' 为我返回 4 个结果。 name 属性的映射是什么?
  • @DanTuffery 你所说的映射是什么意思?如果您的意思是如何创建索引而不是我更新了我的问题。
  • “用户”是否有架构(映射)?我认为 Dan 想了解更多有关名称字段的信息。使用什么分析器等。
  • @coffeeaddict 不,它没有任何字段映射。
  • @coffeeaddict 我还尝试按照 Dan 在他的回答中建议的添加映射(目前已被他删除),以使单独的文件保持不变,因为未对其进行分析和搜索。但在那我失去了不区分大小写的功能。我必须像在现场一样完美地写作。

标签: database search elasticsearch


【解决方案1】:

对于 match_phrase_prefix,max_expansions 的默认值为 50。 这意味着对于术语 "Harry J",弹性将在已排序的术语字典中查找前 50 个术语的 "J"。它将使用最多 50 的字典顺序( max_expansions )将术语组合到查询中(例如:“Jane”、“Joy”、“Joke”)。

(这就是为什么当你的词是 "Harry Jo" 时你会找到所有 4 条记录的原因,因为在排序的词字典中找到 "Jo" 要容易得多前 50 个学期)。

您可以使用如下查询来增加 max_expansions: (使用大量的 max_expansions 会降低性能)

{
"query":{
  "match_phrase_prefix" : {
    "name" : {
      "query" : "Harry J",
      "max_expansions" : 100
    }
  }
}
}

您可以在这里找到更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase-prefix.html#query-dsl-match-query-phrase-prefix

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2015-11-01
    相关资源
    最近更新 更多