2016-04-12 144 views
1

我有以下的註釋基於彈性搜索配置,我已經設置了指數不加以分析,因爲我不希望這些區域被標記化的更多信息:彈性搜索不區分大小寫

@Document(indexName = "abc", type = "efg") 
    public class ResourceElasticSearch { 
    @Id 
    private String id; 
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed) 
    private String name; 
    @Field(type = FieldType.String, store = true) 
    private List<String> tags = new ArrayList<>(); 
    @Field(type = FieldType.String) 
    private String clientId; 
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed) 
    private String virtualPath; 
    @Field(type = FieldType.Date) 
    private Date lastModifiedTime; 
    @Field(type = FieldType.Date) 
    private Date lastQueryTime; 
    @Field(type = FieldType.String) 
    private String modificationId; 
    @Field(type = FieldType.String) 
    private String realPath; 
    @Field(type = FieldType.String) 
    private String extension; 
    @Field(type = FieldType.String) 
    private ResourceType type; 

是否有可能通過使用註釋在名稱上進行搜索,virtualPath和標記是不區分大小寫的? 搜索看起來像這樣,通過通配符搜索是必需的:

private QueryBuilder getQueryBuilderForSearch(SearchCriteria criteria) { 
    String virtualPath = criteria.getPath(); 

    return boolQuery() 
      .must(wildcardQuery("virtualPath", virtualPath)) 
      .must(wildcardQuery("name", criteria.getName())); 
} 
+1

不可能。不是關於Spring Data配置,而是關於Elasticsearch本身。您將數據編入索引爲not_analyze,它將保持這種狀態。另外,如果你想要不區分大小寫的數據,爲什麼不用'關鍵字'分析器結合'小寫'標記過濾器來建立索引? –

+0

感謝您的回覆,我認爲這正是我需要的。 – Andrei

+0

安德烈能請你回答我的答案,以便我能接受嗎? – Andrei

回答

4

不是真的有可能你想要做什麼,這不是關於Spring Data配置,而是關於Elasticsearch本身:你將數據索引爲not_analyzed,它將保持這種狀態。

另外,如果你想要大小寫不敏感的數據,我建議索引與keyword analyzer結合lowercase token filter

1

我發現基於安德烈·斯特凡的建議一些東西,也有類似的結果,以使用註釋:

@Bean 
    public Client client() throws IOException { 
    TransportClient client = new TransportClient(); 
    TransportAddress address = new InetSocketTransportAddress(env.getProperty("elasticsearch.host"), Integer.parseInt(env.getProperty("elasticsearch.port"))); 
    client.addTransportAddress(address); 

    XContentBuilder settingsBuilder = XContentFactory.jsonBuilder() 
      .startObject() 
      .startObject("analysis") 
      .startObject("analyzer") 
      .startObject("keyword") 
      .field("tokenizer", "keyword") 
      .array("filter", "lowercase") 
      .endObject() 
      .endObject() 
      .endObject() 
      .endObject(); 
    if (!client.admin().indices().prepareExists("abc").execute().actionGet().isExists()) { 
     client.admin().indices().prepareCreate("abc").setSettings(settingsBuilder).get(); 
    } 
     return client; 
    }