2016-04-20 2 views
0

Я пытаюсь создать индекс со следующим отображением: createIndexRequestBuilder = client.admin(). Index(). 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

Поле nombre не должно быть index: not_analyzed, но проанализировано с помощью анализатора keyword и lowercase. Что-то вроде этого:

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

, а затем, в отображении:

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

Я попытался сделать это configurationg, но до сих пор не удалось найти результаты, когда я: «значение»: «* Тип 2 * ", Он работает с:" value ":" * type * ". Теперь я могу искать в нечувствительном случае, но не используя два слова (тип и 2) –

+0

Вы уверены, что отображение было применено правильно. После индексирования документов проверьте отображение GET/some_index/_mapping. –

+0

Да, я уверен. Я проверил с/hogan/_mapping, а также с/hogan. С/hogan я вижу разностные отображения. Чтобы создать индекс, я использовал код в ответе: http://stackoverflow.com/a/36745584/6161679 –

Смежные вопросы