簡體   English   中英

Spring Data Elasticsearch僅返回完全匹配

[英]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 ,這意味着

  • 如果術語長度在0到2個字符之間,則必須完全匹配。
  • 如果術語長度在3到5個字符之間,則只允許一次編輯
  • 在此之上,允許兩次編輯

在您的情況下,當您為India編制索引時,將對標記india (小寫)編制索引。

  • 搜索In意味着4次編輯=>不匹配
  • 搜索Ind意味着3次編輯=>不匹配
  • 搜索Indi意味着2次編輯=>不匹配
  • 搜索India意味着1 edit => match

你可能需要使用edge-ngram來標記你的數據而不是使用模糊性,而這種模糊性根本不適合搜索你似乎願意做的前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM