2016-04-12 15 views
1

duyarsız Elastik arama vaka:Ben bu alanların simgeleştirilecek istemiyorum çünkü şu açıklama esaslı elastik arama yapılandırması, ben analiz edilecek değil endeksi kurdum var

@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; 

o tarafından mümkün mü adda arama yapmak için ek açıklamalar kullanarak, virtualPath ve etiketler büyük/küçük harf duyarsız mı olacak?

@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; 
    } 
+1

Gerçekten mümkün değil. Yay Verisi yapılandırmasıyla ilgili değil, Elastics Search'ün kendisi hakkında. Verileri not_analyzed olarak endekslediniz ve bu şekilde kalacak. Ayrıca, küçük harfli bir belirteç filtresiyle birlikte "anahtar kelime" analizcisi ile neden endekslenemediğimize ilişkin büyük/küçük harf duyarsız veriler isteseydiniz? –

+0

Cevabınız için teşekkürler, bence tam olarak ihtiyacım olan şey bu. – Andrei

+0

Andrei cevabını cevap olarak gönderebilir misiniz, böylece kabul edebilir miyim? – Andrei

cevap

4

gerçekten mümkün değil: Ben ek açıklamaları kullanarak benzer bir sonuca sahiptir Andrei Stefan'ın öneri göre bir şey buldum

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

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

: arama joker arama gereklidir, şöyle Yapmak istediğiniz ve Spring Data yapılandırmasıyla ilgili değil, Elasticsearch'ün kendisi hakkında: not_analyzed olarak indekslenmiş verileri ve bu şekilde kalacaksınız.

Ayrıca, büyük/küçük harfe duyarsız veri istiyorsanız, lowercase token filter ile birlikte keyword analyzer ile birlikte endeksleme yapmanızı öneririz.