当前位置: 首页 > 面试题库 >

为词组搜索和部分匹配建立索引的字段

公孙锋
2023-03-14
问题内容

我在对象上创建索引,并希望既可以进行完整短语搜索也可以进行部分匹配。该类型称为“发送方”,简化的索引创建如下所示:

{
   "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.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”。具有原始名称的多字段用作默认值,因此您应该仅使用“名称”。
同样,最好确保索引和搜索分析器的顺序正确(例如,将索引词和搜索词都更改为小写)。



 类似资料:
  • 问题内容: 使用GAE搜索API是否可以搜索部分匹配项? 我正在尝试创建自动完成功能,其中该术语将是部分单词。例如。 b bui 构建 都将返回“建筑物”。 GAE怎么可能? 问题答案: 尽管全文搜索不支持LIKE语句(部分匹配),但是您可以修改它。 首先,为所有可能的子字符串标记数据字符串(hello = h,he,hel,lo等) 使用标记化的字符串构建索引+文档(搜索API) 执行搜索,然后

  • 问题内容: 我正在寻找给定此数组的函数, 我想寻找针头 “面包” 并得到以下结果 问题答案: 使用。您可以提供一个回调,该回调确定哪些元素保留在数组中以及哪些元素应删除。(从回调返回的值指示应删除给定的元素。)类似这样的东西: 欲获得更多信息: 返回值

  • 问题内容: 我想搜索包含许多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下: 这是我的搜索方法。我不想寻找特定的词组,但是其中的任何单词。用于搜索的分析器与用于索引的分析器相同。 我是Lucene的新手。有人可以帮我吗? 问题答案: 使用会精确地尝试将短语“单词列表”与短语坡度0匹配。 如果要匹配单词列表中的 任何 术语,可以使用: 或者,您也可以使用,以便您可以要求查询词的数量的

  • 问题内容: 您是否需要为Oracle数据库中按字段分组的字段创建索引? 例如: 我正在测试我为上面创建的索引,与此查询唯一相关的索引是为field_two创建的索引。在任何其他字段上创建的其他单字段索引或组合索引将不会用于上述查询。这听起来正确吗? 问题答案: 可能是正确的,但这取决于您拥有多少数据。通常,我会为我在GROUP BY中使用的列创建索引,但是在您的情况下,优化器可能已经决定,在使用f

  • 我正在努力在我们的应用程序中集成Lucene。Lucene目前正在工作,例如当我搜索“上传”时,文档中有一些叫做“上传”的文本,那么它就工作了,但是当我搜索“上传”时,那么它就不工作了。有什么想法吗? 代码: 谢谢你。

  • 我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术