elasticsearch - 用Elasticsearch搜索完全匹配的文本

标签 elasticsearch exact-match

我想在下面的行中搜索“确切的工作区”,现在它返回与工作区匹配的所有记录以及任何其他包含该单词的记录。

例如,如果我搜索“财务”,它也会返回“公司财务”。谁能建议如何使这一行仅返回完全匹配项?

boolQuery.should(QueryBuilders.matchPhraseQuery("audiences.areasOfWork", areaOfWork));


boolQuery.should(QueryBuilders.matchPhraseQuery("audiences.interests", interest));

BoolQueryBuilder filterQuery = boolQuery();
filterQuery.must(QueryBuilders.matchQuery("audiences.grades", grade));
filterQuery.must(QueryBuilders.matchQuery("status", status));
filterQuery.mustNot(QueryBuilders.matchQuery("audiences.type", "Valid"));

SearchQuery searchQuery = new NativeSearchQueryBuilder()
    .withQuery(boolQuery)
    .withFilter(filterQuery)
    .withSort(SortBuilders.scoreSort().order(SortOrder.DESC))
    .withPageable(pageable)
    .build();

return operations.queryForPage(searchQuery, Course.class);

最佳答案

而不是在分析的字段中进行搜索,您需要在未分析的字段中进行搜索,该字段已针对精确匹配进行了优化。

您没有共享索引的映射(我也不确定您使用的是哪个客户端),我只是假定了字符串字段的默认映射。

以下更改可能会有所帮助:

  • 使用match而不是match-phrase(短语对于完全匹配没有意义)
  • 使用类型关键字的字段(文本的未分析版本)

  • 请记住,通过上述更改,您需要匹配索引时的确切字符串(大小写相同,间距相同等)。
    boolQuery.should(QueryBuilders.matchQuery("audiences.areasOfWork.keyword", areaOfWork));
    

    关于elasticsearch - 用Elasticsearch搜索完全匹配的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60413775/

    相关文章:

    elasticsearch - Elasticsearch未分配的碎片:如何重新分配?

    elasticsearch - Elasticsearch-带通配符的query_string

    elasticsearch - 单机性能上的多个碎片

    sorting - Elasticsearch确切结果不会在第一时间返回

    mysql - 如何从sql语句中选择准确的值

    javascript - 数据表单个列过滤(选择标记): Use Exact Match

    javascript - 如何在 ElasticSearch 和 ElasticSearch Javascript 客户端中按 ID 和 ID 查找

    elasticsearch - 当我 network.bind_host : localhost , 它不起作用

    sql - 如何让 SQL Server 只返回完全匹配的内容?

    regex - 使用grep仅提取整个单词