2016-04-20 132 views
0

我試着用下面的映射創建索引: createIndexRequestBuilder = client.admin()。indices()。prepareCreate(document.indexName());Elasticseach搜索部分文本

  XContentBuilder mappingBuilder = jsonBuilder() 
       .startObject() 
        .startObject("my_type") 
         .startObject("properties") 
          .startObject("nombre") 
           .field("type", "string") 
           .field("index", "not_analyzed") 
          .endObject()         
          .startObject("codigo") 
           .field("type", "string") 
           .field("index", "not_analyzed") 
          .endObject()         
         .endObject() 
        .endObject() 
       .endObject(); 

     createIndexRequestBuilder.addMapping("my_type", mappingBuilder); 

然後,如果我嘗試如下因素搜索:

GET /hogan/tipos-documento/_search?pretty 
{ 
    "query": { 
     "bool": { 
      "must": [ 
       {"wildcard": { 
        "nombre": { 
        "value": "*Type 2*" 
        } 
       }} 
      ] 
     } 
    } 
} 

沒有問題。但是,如果我嘗試「值」:「2型有沒有結果,因爲‘通配符’是區分大小寫的

有沒有辦法做到在不敏感的情況下,搜索也許通過另一種方式做索引。?。 ..

簡化,我想喜歡實體:

public class Entity{ 
    private Long id; 
    private String name; 
} 

,並具有搜索表單,用戶可以輸入「名」的部分文本(大寫或小寫」來進行搜索

提前致謝

回答

0

您的​​字段不應該是index: not_analyzed,而是使用keywordlowercase分析儀進行分析。事情是這樣的:

{ 
    "settings": { 
    "index": { 
     "analysis": { 
     "analyzer": { 
      "keyword_lowercase": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": [ 
       "lowercase" 
      ] 
      } 
.... 

,然後,在映射:

  "nombre": { 
       "type": "string", 
       "analyzer": "keyword_lowercase" 
      } 
+0

我試圖做到這一點configurationg,但仍無法找到結果時,我做的事:「值」:「* 2型*「,它使用:」value「:」* type *「。現在我可以在不敏感的情況下進行搜索,但不能使用兩個單詞(type和2) –

+0

您確定映射已正確應用。索引文件後,檢查映射'GET/some_index/_mapping'。 –

+0

是的,我確定。我檢查過/ hogan/_mapping,還有/ hogan。隨着/ hogan我可以看到differents映射。要創建索引,我已經在答案中使用了代碼:http://stackoverflow.com/a/36745584/6161679 –