使用@MultiField注解给字段取别名并设置为keyword类型
@MultiField(mainField = @Field(type = FieldType.Text),
otherFields = @InnerField(suffix = "text", type = FieldType.Keyword))
private String content;
dao层如下
public interface TestRepository extends ElasticsearchRepository<TestEntity, Long> {
}
实体类如下
@Data
@ToString
@Document(indexName = "test")
public class TestEntity {
@Id
private String id;
@MultiField(mainField = @Field(type = FieldType.Text),
otherFields = @InnerField(suffix = "text", type = FieldType.Keyword))
private String content;
}
模糊查询测试如下:
@Test
void searchMessage(){
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().
withQuery(QueryBuilders.matchQuery("content", "我")).build();
for (SearchHit<TestEntity> searchHit : elasticsearchRestTemplate.search(searchQuery, TestEntity.class)) {
System.out.println("searchHit = " + searchHit);
}
}
可以看到模糊查询content中一共有3条数据有我这个分词
精准查询如下:
@Test
void searchMessage(){
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().
withQuery(QueryBuilders.termQuery("content.text", "我")).build();
for (SearchHit<TestEntity> searchHit : elasticsearchRestTemplate.search(searchQuery, TestEntity.class)) {
System.out.println("searchHit = " + searchHit);
}
}
可以看到精准查询就只有一条结果,符合精准查询。文章来源:https://www.toymoban.com/news/detail-784713.html
注意:该方法需要版本支持,具体版本未知,但是在6.6.2版本不行,而在7.17.3版本中可行文章来源地址https://www.toymoban.com/news/detail-784713.html
到了这里,关于Elasticsearch实现对同一字段既能精准查询也能模糊查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!