gpt4 book ai didi

Java : search for multiple fields in an index in elasticsearch

转载 作者:行者123 更新时间:2023-12-02 11:38:31 25 4
gpt4 key购买 nike

我在这里想要实现的是搜索索引中的两个字段。kibana 中的结构如下所示:

POST arempris/emptagnames
{
"mappings" : {
"emptags":{
"properties": {
"employeeid": {
"type":"integer"
},
"tagName": {
"type": "text",
"fielddata": true,
"analyzer": "english"
}
}
}
}
}

在java中,我编写了一段代码来搜索名为“tagName”的单个字段并以jsonArrayBuilder格式返回searchHits。

与此类似,在这种情况下,是否可以先搜索employeeid,然后返回与该employeeid关联的tagNames列表?

如果是 RDBMS,我的查询将如下所示:从文件元数据中选择 tagNames,其中employeeid = 124 和 tagName 如 %slip%,这就是我希望使用 QueryBuilder 实现的内容。可以实现吗?

我编写的用于搜索索引中单个字段的java代码是:

Client esclient = getClient();

String index = "arempris";
String type = "tags";

QueryBuilder query = QueryBuilders.matchPhrasePrefixQuery("tagName", tagName);
SearchResponse response = esclient.prepareSearch(index).setTypes(type)
.setQuery(query)
.execute().actionGet();

hits = response.getHits().getHits();
System.out.println(hits.length);
for (int i = 0; i < hits.length; i++) {
System.out.println(hits[i].getSourceAsString());
}

非常感谢您的帮助和提前致谢。

最佳答案

您可以使用带有 must 子句的 bool 查询 来实现 AND 行为。您可以使用 term 查询来获取精确匹配,使用 wildcard 查询来获取 like

BoolQueryBuilder query = new BoolQueryBuilder();
query.must(new WildcardQueryBuilder("tagName", "*slip*"));
query.must(new TermQueryBuilder("employeeid", 123));

关于Java : search for multiple fields in an index in elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48740013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com