使用@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);
}
}
可以看到精准查询就只有一条结果,符合精准查询。
注意:该方法需要版本支持,具体版本未知,但是在6.6.2版本不行,而在7.17.3版本中可行