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

在跨多个索引进行搜索时,如何在搜索结果中获取索引名称?

井高峯
2023-03-14

当跨多个索引进行搜索时,elasticsearch的“多重匹配”查询将返回搜索结果中的索引名称。

GET localhost:9200/users,locations/_search

{
    "query":{
        "multi_match":{
            "query": "pus",
            "type": "bool_prefix",
            "fields":[
                "name",
                "name._2gram",
                "name._3gram"
            ]
        }
    }
}

响应包含_index字段,该字段告诉结果来自的索引

"hits": [{
    "_index": "locations",
    "_type": "_doc",
    "_id": "418",
    "_score": 1.0,
    "_source": {
      "name": "pusan-kwangyokshi | korea republic of | asia",
      "@timestamp": "2020-09-21T07:12:34.432Z"
    }
  },
  {
    "_index": "users",
    "_type": "_doc",
    "_id": "4",
    "_score": 1.0,
    "_source": {
      "name": "Puspjer taojomi",
      "uniqueId": "skjhs-sklhjs125",
      "accountStatus": 1,
      "email": "xyz@gmail.com",
      "@timestamp": "2020-09-22T09:57:22.977Z"
    }
  },
  {
    "_index": "users",
    "_type": "_doc",
    "_id": "52",
    "_score": 1.0,
    "_source": {
      "name": "Puspa yabna",
      "uniqueId": "sjhslkj-ta18ynsarda5",
      "accountStatus": 1,
      "email": "abc@gmail.com",
      "@timestamp": "2020-09-22T09:57:23.121Z"
    }
  }
]

spring-data-elasticsearch中用于命中的类是SearchHitsSearchHit具有字段id内容分数用于获取与elasticsearch查询相似的数据。但它不包含用于存储_index字段信息的相关字段。

还支持吗?我需要根据哪个客户端应用程序将生成一些URL发送搜索命中类型(_indexname)。

这是我使用spring的搜索查询

final NativeSearchQuery query = new NativeSearchQuery(QueryBuilders.multiMatchQuery(q, "name", "name._2gram", "name._3gram").type(MultiMatchQueryBuilder.Type.BOOL_PREFIX));
IndexCoordinates indexCoordinates = IndexCoordinates.of("users","locations");

return operations.search(query, OutDto.class, indexCoordinates)
        .getSearchHits()
        .stream()
        .map(SearchHit::getContent)
        .collect(Collectors.toList());


//The DTO class
public class OutDto{
  private Integer id;
  private String uniqueId;
  private String name;
  private String index;
}

共有1个答案

南门新荣
2023-03-14

这是通过以下方式实现的https://jira.spring.io/browse/DATAES-848并且在里程碑版本4.1之后的4.1版本中。M1。

有关如何使用RC或里程碑版本的信息,请访问https://github.com/spring-projects/spring-data-elasticsearch#maven-configuration

 类似资料:
  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 问题内容: 我有弹性簇,其中我的索引包含当前日期-例如: 是否可以跨多个索引查询,而忽略不存在的索引。例如,这 WORKS : 而这 会返回404 : 我希望第二个示例仅从25日起返回文档。 问题答案: 如果您使用通配符,则无需担心,ES会找出匹配的索引。 如果您真的想枚举索引,可以在调用中指定: 或者,您也可以使用索引别名并仅查询该别名。在创建新索引时,您还将该别名添加到索引中。这样做的好处是您

  • 问题内容: 我有两个具有以下映射的索引(我将简化它们的映射): 1)AccountType映射: 2)ProductType映射: 现在,我有几件事需要弄清楚: 1)首先,有一个索引是一个好主意,在我的情况下是帐户,并且产品是嵌套对象,但是在这里每次我要更新/添加新产品时,我都必须重新索引(更新)整个帐户文件? 2)我的第二个问题是:我想具有搜索功能,因此,如果用户通过在文本框中键入内容进行搜索,

  • 在测试此文本时,我在要在文本中搜索的列上创建了lucene(3.0.1)索引: 如果我按关键字搜索,它会给出结果,但按 我正在使用standardAnalyzer: 因为已设置,它应创建令牌,并且应存在$GLD。Analyzer将从文本中删除停止字,因为word也将在该过程中删除。

  • 问题内容: 我是numpy的新手,并且正在python中使用随机森林实现集群。我的问题是: 如何找到数组中确切行的索引?例如 我寻找并得到结果1(第二行的索引)。 有什么建议吗?遵循代码(不起作用…) 问题答案: 为什么不简单地做这样的事情?

  • 我使用< code > Hibernate Search 4 . 5 . 1 编写了< code>Spring web-app。当我尝试搜索时,它返回一个条目列表。我认为索引中的问题。用于索引的目录已创建,但实体保存文件后,目录中的文件不变。 这是我的Spring配置文件 我的实体文件