Elasticsearch 中基于wildcardQuery的中文模糊查询失效

es内容

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 6,
    "successful" : 6,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 5,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "person_award",
        "_type" : "_doc",
        "_id" : "0",
        "_score" : 1.0,
        "_source" : {
          "id" : 0,
          "awardName" : "string",
          "awardTime" : "string",
          "isDel" : 0
        }
      },
      {
        "_index" : "person_award",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "id" : 3,
          "awardName" : "你好呀",
          "awardTime" : "string",
          "isDel" : 0
        }
      },
      {
        "_index" : "person_award",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "id" : 4,
          "awardName" : "你",
          "awardTime" : "string",
          "isDel" : 0
        }
      },
      {
        "_index" : "person_award",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "id" : 5,
          "awardName" : "好",
          "awardTime" : "string",
          "isDel" : 0
        }
      },
      {
        "_index" : "person_award",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "id" : 1,
          "awardName" : "编程的思想",
          "awardTime" : "编程的思想",
          "isDel" : 0
        }
      }
    ]
  }
}

如下写法,英文查询没问题,中文查询有问题。中文查询的问题体现在,单个字查询,没问题,多个字查询,则不支持。例如输入好,可以查到对应的记录。输入你好或编程,则查到的结果为空。

SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.wildcardQuery("awardName", "*" + personAward.getAwardName() + "*"))
                .build();
        List<PersonAward> holidaysList = elasticsearchTemplate.queryForList(searchQuery, PersonAward.class);

改成如下写法,英文、中文查询,都没有问题。主要区别,是在字段后面加了一个keyword

SearchQuery searchQuery = new NativeSearchQueryBuilder()
            .withQuery(QueryBuilders.wildcardQuery("awardName.keyword", "*" + personAward.getAwardName() + "*"))
            .build();
List<PersonAward> holidaysList = elasticsearchTemplate.queryForList(searchQuery, PersonAward.class);

时间有限,没仔细定位原因。

参考文档

Elasticsearch 中基于wildcardQuery的模糊查询失效_bigbearxyz的博客-CSDN博客

ElasticSearch 模糊查询 wildcard 的一些问题_小甄笔记的博客-CSDN博客

ElasticSearch 标准方法QueryBuilders.wildcardQuery(“name.keyword“,“*xxxx*“)模糊查询查不出结果_yuke98727的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/gaoshan12345678910/article/details/120953620