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

使用Java API在Elasticsearch的所有字段中搜索多个字符串

方宁
2023-03-14

我有一个elasticsearch索引,其中包含具有以下字段的用户:.“名称”:“凯”“年龄”:“23”“位置”:“德里,印度”“标签”:[“搜索”,“nosql”]等。

我想在用户的所有字段中查询多个字符串(例如:[“nosql”、“德里”)。可以使用Java API吗?

这是我正在使用的代码示例。(但与问题无关)这只是为了了解我现在使用的对象。

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.matchAllQuery());
        if(location!=null) {
            queryBuilder.must(QueryBuilders.matchQuery("location",location));
        }
        BoolFilterBuilder filerBuilder=FilterBuilders.boolFilter();     
        for(String skill:skills){
            filerBuilder.must(FilterBuilders.rangeFilter("tags."+skill).from(0));
        }
        filerBuilder.must(FilterBuilders.queryFilter(queryBuilder));
        if(age!=null) {
            filerBuilder.must(FilterBuilders.rangeFilter("age").from(age[0]).to(age[1]));
        }
        SearchResponse response = client.prepareSearch("skillbin")
                .setTypes("stackdump")
                .setSearchType(SearchType.QUERY_AND_FETCH)
                .setQuery(queryBuilder)   
                .setPostFilter(filerBuilder)
                .addSort("reputation", SortOrder.DESC)
                .execute()
                .actionGet();
        SearchHits hits=response.getHits(); 

感谢提前。:)

共有3个答案

从经略
2023-03-14

对于Java Elastic restHighLevelClient:

将“_all”替换为“*”。

字符串queryString="nosql delhi";

String allField = "*";

MultiMatchQueryBuilder mmqb=QueryBuilders.multiMatchQuery(queryString, allField);

曾阳飙
2023-03-14

如果您使用的是标准analyzer,elasticsearch默认情况下会使用空白标记器标记每个单词。

在这种情况下,您可以使用查询字符串查询进行搜索,您可以添加多个字段进行搜索。此外,查询字符串查询的默认运算符是“或”。因此,如果您的搜索词是“nosql delhi”(就像您的情况一样),它将被翻译成“nosql或delhi”,并在查询中指定的所有字段中进行搜索。这样,您可以在多个字段中搜索多个术语。

希望有帮助。

胡星汉
2023-03-14

在Java API中,您可以查询“_all”字段,默认情况下,该字段包括文档的所有字段。另一种方法是使用MultiMatchQuery,它更灵活,允许您指定要查询的字段列表。

下面是一些关于如何访问“_all”字段以及如何使用MultiMatchQueryBuilder和QueryBuilder创建MultiMatchQuery的示例代码。multiMatchQuery沿着要在所有字段中搜索的查询:

String queryString = "nosql delhi";

String allField = "_all";

MultiMatchQueryBuilder mmqb = QueryBuilders.multiMatchQuery(queryString, allField);
 类似资料:
  • 问题内容: 我正在使用最新版本的elasticsearch-php以及最新版本的MongoDB和ElasticSearch。 我需要对可以包含一个或多个值的多个字段进行搜索。例: country_code应为NL,BE或DE,并且类别应包含AA01,BB01,CC02或ZZ11 我以为我会按照以下方式解决它(PHP): 但是结果甚至还不能接近我期望返回的数据。 有时 $ countries 和/或

  • 我需要在我的应用程序中添加搜索栏。搜索将按名和姓进行搜索。我不知道如何编写elastcsearch查询。名字和姓氏是两个分开的字段。我是个新手。 例:名:约翰,姓:约书亚 搜索栏字符串为上层结果:约翰·乔·约翰·乔·约翰·乔·乔·约翰·约书亚·约翰·约书亚·乔...

  • 我有一个endpoint,我正在将它代理到ElasticSearchAPI中,以进行简单的用户搜索。 有关这些参数的一些详细信息如下 所有参数都是可选的 昵称可以作为全文搜索进行搜索(即'myUser'将返回'myUsername') 电子邮件必须完全匹配 名称可以搜索为每个令牌的全文搜索(即'john'将返回'John Smith') ElasticSearch调用应将参数集体视为AND'd。

  • 问题内容: 我想在我存储在Elasticsearch 7.3中的文档中搜索单词 我想要在以前版本的Elasticsearch上工作的示例是: 但是此查询不适用于Elasticsearch 7+,因为已删除。现在该字段消失了,我该如何编写查询以完成相同的任务? 注意:我已经阅读了将所有字段复制到自定义字段中的建议,但是这要求显式地写出每个字段以包括在all_fields字段中。由于我有很多小字段,因

  • 问题内容: Elasticsearch版本:7.1.1 嗨,我做了很多尝试,但是在索引中找不到任何解决方案,我有一个包含字符串的字段。 因此,例如,我有两个文档,它们在locations数组中包含不同的值。 文件1: 文件2: 用户请求搜索术语 克洛彭堡, 而我只想返回那些包含术语 克洛彭堡 而不是 Landkreis Cloppenburg的 文档。结果应仅包含 Document-1 。但是我的

  • 问题内容: 弹性搜寻1.6 我想索引包含连字符的文本,例如U-12,U-17,WU-12,T恤…,并能够使用“简单查询字符串”查询来搜索它们。 数据样本(简体): 所以我去了这个映射: 使用以下查询进行搜索: 什么有效: “ U-12”,“ U ”,“ t ”,“ ts *” 什么不起作用: “ U-”,“ u-1 ”,“ t-”,“ t-sh ”,… 看来char过滤器未在搜索字符串上执行?我该