更改Sping Boot Elasticsearch模式匹配大小的令牌长度

inkz8wg9  于 2023-02-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(74)

我正在使用Sping Boot 和ElasticSearch,我试图使用三个字符的搜索,但搜索只匹配五个字符或更多。
如果我的用户名为“Bob Smith”,则搜索“Smith”可以找到匹配项,但搜索“Bob”找不到匹配项。
我怀疑这是我的类“SearchMappingConfig implements HibernateOrmSearchMappingConfigurer”中需要更改的内容,但我找不到任何有关更改成功匹配结果所需的标记大小的信息。
我的“@ Entity”表在要包括在令牌搜索中的字段上具有“@ FullTextField(analyzer =“英语”)“注解。
如何更改搜索匹配的长度?
理想情况下,我希望任意三个字母形成匹配,因此搜索“罗恩”将匹配“罗纳德”和“Laronda”
ElasticSearch7.14 Spring Boot 2.7.6
我一直在阅读Sping Boot 和ElasticSearch文档,但找不到任何有关更改匹配长度的信息。

ghg1uchk

ghg1uchk1#

Hibernate能够使用ElasticSearch或Lucene客户端。我们现有的项目使用Lucene,如果要替换它,那将是一项巨大的事业。
推荐的解决方案是创建新的分析器,以便传入数据创建更小的令牌,我不想更改现有数据库上的分析器。
我能找到的很多文档都指向使用Elasticsearch查询构建器或使用通配符的Hibernate 5方法。
我测试了我们的Elasticsearch,发现通配符解决方案可以工作。
我最终使用Hibernate 6方法进行通配符搜索,效果很好。

SearchResult<DataClass> result = searchSession.search(DataClass.class)
                .where(f -> f.wildcard()
                                .fields(
                                        "firstname",
                                        "lastname",
                                        "username",
                                        "currentLegalName")
                                .matching("*"+searchText.toLowerCase()+"*"))
                .fetch(10);
   long totalHitCount = result.total().hitCount();
   logger.debug("Search results size {}", totalHitCount);

相关问题