[英]Spring Data Elasticsearch only returning exact matches
我做了一個簡單的項目,使用Spring Data Elasticsearch測試free text search
。 這是我的實體:
@Document(indexName = "flag", type = "flag")
public class Flag {
@Id
private String flagCode;
@MultiField(mainField = @Field(type = FieldType.String))
private String flagName;
// setters and getters
}
現在,我的搜索操作如下:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(fuzzyQuery("flagName", freeText))
.build();
List<Flag> flags = elasticsearchTemplate.queryForList(searchQuery, Flag.class);
有了這個,我只獲取對象,其flagName
是精確匹配flagName
在那里,因為我想,如果至少2個字符匹配,它應該是一個匹配 。
如果相關,我的DataConfig
文件如下所示:
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.shubham.dao")
@ComponentScan(basePackages = "com.shubham.data")
public class DataConfig {
@Value("${elasticsearch.clustername}")
private String clusterName;
@Value("${elasticsearch.host}")
private String elasticsearchHost;
@Value("${elasticsearch.port}")
private int elasticsearchPort;
@Bean
public Client client() throws Exception {
Settings esSettings = Settings.settingsBuilder()
.put("cluster.name", clusterName)
.build();
//https://www.elastic.co/guide/en/elasticsearch/guide/current/_transport_client_versus_node_client.html
return TransportClient.builder()
.settings(esSettings)
.build()
.addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(elasticsearchHost), elasticsearchPort));
}
@Bean
public ElasticsearchOperations elasticsearchTemplate() throws Exception {
return new ElasticsearchTemplate(client());
}
}
我可能做錯了什么? 我是Elasticsearch的新手。
默認情況下, fuzzy
查詢的模糊設置為AUTO
,這意味着
在您的情況下,當您為India
編制索引時,將對標記india
(小寫)編制索引。
In
意味着4次編輯=>不匹配 Ind
意味着3次編輯=>不匹配 Indi
意味着2次編輯=>不匹配 India
意味着1 edit => match 你可能需要使用edge-ngram來標記你的數據而不是使用模糊性,而這種模糊性根本不適合搜索你似乎願意做的前綴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.