当前位置: 首页 > 知识库问答 >
问题:

获取ElasticSearch方面以将多字段内容视为原子术语

闾丘选
2023-03-14

我正在使用ElasticSearch,我想知道是否可以使用faceting来检索结果的一些统计数据,更具体地说,在我的结果中提到最多的人。我已经有一个包含该信息的字段。但现在,当我想按多个单词分组时,我的facet结果按术语打破了该领域的数据。

IE:如果用户搜索John,我希望获得诸如

   {
    [...]
    "facets" : {

        "topPeople" : {
        "_type" : "terms",
        "missing" : 0,
        "total" : 1739884,
        "other" : 1705319,
        "terms" : [ {
           "term" : "John Smith",
           "count" : 13954
          }, {
           "term" : "John Snow",
           "count" : 1432
          }, {
           "term" : "John Baird",
           "count" : 770
          }]
       }
   }

相反,ElasticSearch按术语分解结果并返回如下内容:

   {
    [...]
    "facets" : {

        "topPeople" : {
        "_type" : "terms",
        "missing" : 0,
        "total" : 1739884,
        "other" : 1705319,
        "terms" : [ {
           "term" : "John",
           "count" : 1739884
          }, {
           "term" : "Smith",
           "count" : 13954
          }, {
           "term" : "Snow",
           "count" : 1432
          }]
       }
   }

我在某个地方读到,如果我将索引设置为不被分析,ElasticSearch应该返回完整的单词字符串。然而,我仍然希望用户能够在字段上搜索。我想避免重复该字段来拥有一个未分析的字段。有什么方法可以用ElasticSearch对每个字段进行分组吗?

我目前正在使用以下方面查询:

{
 "query" : {
   [...]
 },
 "facets" : {
   "topPeople" : {
     "terms" : {
        "field" : "people",
        "size" : 3
      }
    }
  }
}

共有1个答案

刁远
2023-03-14

你在正确的轨道上。您需要一个不需要分析的索引来完成您所要求的工作,但是您不需要牺牲用户在字段上的搜索方式。这里的答案(对于<1.x版本)是多字段类型。对于您的示例,您希望您的映射如下所示:

    "topPeople" : {
        "type" : "multi_field",
        "fields" : {
            "topPeople" : {"type" : "string", "index" : "analyzed"},
            "raw" : {"type" : "string", "index" : "not_analyzed"}
        }
    }

搜索时,您可以继续在toppeople上搜索,但在facet时,您将在toppeople.raw上facet。

 类似资料:
  • 问题内容: 我正在使用Elasticsearch v2.3.0。假设我有一个映射索引: 所以,从文本复制到文本因。如果你查询信息,然后从纯数据显示在现场,因为不被修改。如果要获取所有文本,则应汇总客户端上的所有字段。如果有许多子字段,这可能会带来不便。 是否有一个魔术查询,该查询允许获取复制了所有文本的字段? 问题答案: 在字段集的映射中, 您应该能够使用字段来获取它 范例 : 结果

  • 问题内容: 我正在阅读elasticsearch的文档,此[page] [1]讨论了使用将孩子映射到父类型。 如果我有被称为孩子的父母,则被称为: 每种类型的字段: 我怎么能在搜索领域和领域的前提是的是? 有没有办法让父母拥有的所有孩子(某种类型或任何类型)? 在索引子文档时,是否可以将父对象作为对象属性传递给JSON数据,而不是将其作为查询字符串的一部分? 在尝试了imotov的建议之后,我想到

  • 问题内容: 我的映射定义中包含以下字段: 当我索引用的有价票证该值被分成3个术语:,,。 我究竟做错了什么? 我创建了以下索引: 然后我索引以下文档: 然后,我将插件https://github.com/jprante/elasticsearch-index- termlist 与以下API结合使用: 这将给我以下响应: `` 问题答案: 通过运行以下命令验证映射是否已真正设置: 创建索引的命令似

  • 问题内容: 我只想获取嵌套字段,但不能,因为它不是叶字段。 我在下面尝试过,但是无法匹配嵌套对象中的每个ID和名称。 结果: 这是我的预期结果: 问题答案: 如果您没有某个查询应以某种方式匹配嵌套字段,则可以这样进行: 如果您还有一个查询,并且想返回 匹配 的 嵌套文档,则 可以这样操作(使用):

  • 我有映射: 和一些文件: 等等。 我尝试进行查询: 未找到任何结果。如果我尝试将同一查询按字段与其他类型(不是字符串,也没有原始子字段)一起使用,它会起作用。我应该如何为这种情况编写查询?谢谢 P、 美国字段“FieldA”具有子字段raw,因为我需要同时分析和不分析此字段

  • 你如何获得子节点内容与JavaScript具体? 我可以通过以下方式获取父节点信息: 花岗岩资源属性 但是我需要访问子节点 -家长 --子对象(命名图像) 有很多方法可以通过Java访问子节点,但我正在构建一个只使用JavaScript的解决方案: 下面是Java示例