【问题标题】:Indexing a field for both phrase searching and partial matches为短语搜索和部分匹配索引字段
【发布时间】:2013-10-21 22:52:32
【问题描述】:

我正在为一个对象创建一个索引,并且希望能够进行完整的短语搜索以及部分匹配。该类型称为“deponent”,简化的索引创建如下所示:

{
   "deponent": {
      "properties": {         
         "name": {
            "type": "multi_field",
            "fields": {
               "name": {
                  "type": "string"
               },
               "full": {
                  "type": "string",
                  "index": "not_analyzed",
                  "omit_norms": true,
                  "index_options": "docs",
                  "include_in_all": false
               }
            }
         }
      }
   }
}

这样做的目的是对“name”字段中的值进行两次索引:一次是字段中的单个单词没有被分解(name.full),一次是单词被分解(name.name) .

我有一个已编入索引的文档,其名称字段设置为“Danny Watson 博士”。我希望在执行术语查询时会发生以下行为(根据文档未分析其查询字符串):

  1. 使用“Danny Watson 博士”搜索 name.full 时,记录 应该退回
  2. 使用“Watson”搜索name.full时,不应返回记录
  3. 当使用“Danny Watson”搜索name.name时,记录不应返回
  4. 使用“Watson”搜索name.name时,应该返回记录

以上四点的查询:

1 - 按预期工作(返回记录)

{
    "query" : {
        "term": {
           "name.full": {
              "value": "Dr. Danny Watson"
           }
        }
    }   
}

2 - 按预期工作(不返回记录)

{
    "query" : {
        "term": {
           "name.full": {
              "value": "Watson"
           }
        }
    }   
}

3 - 按预期工作(不返回记录)

{
    "query" : {
        "term": {
           "name.name": {
              "value": "Dr. Danny Watson"
           }
        }
    }   
}

4 - 是否按预期工作 - 不返回记录

{
    "query" : {
        "term": {
           "name.name": {
              "value": "Watson"
           }
        }
    }   
}

看来我对某事的理解是有缺陷的。我错过了什么?

【问题讨论】:

  • 您使用什么分析仪?可能是您的索引和搜索分析器不同吗?尝试在您的 name.name 字段中查找“watson”(全部为小写)。这会带来结果吗?
  • 以上是完整的索引创建和搜索请求。因此,除了指定之外,将使用默认值。将搜索查询文本更改为小写不会改变任何内容。
  • 啊,你不需要调用字段“name.name”。具有原始名称的多字段用作默认值,因此您应该只使用“名称”。
  • 我发誓我最初是这样做的,但没有成功。有可能我没有先删除我的映射,所以映射实际上并没有改变。现在在查询中将 name.name 更改为 name 即可;如果您根据列发布答案,我会将其标记为正确答案。

标签: elasticsearch


【解决方案1】:

您不需要调用字段“name.name”。具有原始名称的多字段用作默认值,因此您应该只使用“名称”。
此外,最好确保索引和搜索分析器是有序的(例如,您的索引词和搜索词都更改为小写)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多