0

Я использую следующий код для фильтрации с помощью эластичного поиска java api, он отлично работает и возвращает результат, если я использую строковый запрос, но если я использую текст с пробелами или прописными буквами, возвращать любые данныеelasticsearch с пространством NativeSearchQueryBuilder и прописными буквами

если использовать

String query={"bool":{"should":[{"term":{"name":"test"}}]}} 

возврата данных

и если я использую

String query={"bool":{"should":[{"term":{"name":"test airportone"}}]}} 

или

String query={"bool":{"should":[{"term":{"name":"TEST"}}]}} 

возврата нет данных

String query={"bool":{"should":[{"term":{"name":"test airport one"}}]}} 
BoolQueryBuilder bool = new BoolQueryBuilder(); 
    bool.must(new WrapperQueryBuilder(query)); 

SearchQuery searchQuery = new 
      NativeSearchQueryBuilder() 
      .withQuery(bool) 
      .build(); 
    Page<Asset> asset = 
      elasticsearchTemplate.queryForPage(searchQuery,Asset.class); 
     return asset.getContent(); 
+0

возможно дубликат http://stackoverflow.com/questions/21933787/elasticsearch-not-returning-results-for-terms-query-against-string-property – ChintanShah25

ответ

0

У вас два варианта в зависимости от вашего сценария использования.

Первый вариант: Вы можете использовать match вместо term искать строку, если вы хотите, чтобы получить преимущество ElasticSearch полнотекстовых возможностями поиска.

{ 
    "bool": { 
     "should": [{ 
      "match": { 
       "name": "test airportone" 
      } 
     }] 
    } 
} 

Второй вариант: Можно также указать, что name поле not analyzed при отображении индекса так ElasticSearch всегда будет хранить его, как это и всегда будет получить точное совпадение.

"mappings": { 
    "user": { 
     "properties": { 
      "name": { 
       "type": "string" 
       "index": "not_analyzed" 
      } 
     } 
    } 
} 
+0

Спасибо вам переигрывать, я использую IndexQuery indexQuery = new IndexQueryBuilder(). WithId (id) .withObject (актив) .build(); elasticsearchTemplate.index (indexQuery); Как я могу индекс с not_analyzed –

+0

Использование '@Field (тип = String, индекс = not_analyzed)' ' частное имя строки,' вы можете импортировать '' not_analyzed' из org.springframework.data.elasticsearch.annotations.FieldIndex' – MIE