2015-12-18 4 views
2

Я использую laravel 4.2. моя база данных - mongodb. У меня есть таблица под названием products и поле в моем db, которое называется brand, которое имеет значение ABC в верхнем регистре.elasticsearch не работает при использовании прописных букв в запросе

При использовании этого запроса ['term' => ['brand' => 'ABC']] набор результатов пуст.

Но когда я попытался использовать этот ['term' => ['brand' => 'abc']], он фактически работает и возвращает все продукты с brand = 'ABC'.

Мой вопрос: почему elasticsearch не может найти заглавные буквы?

ответ

2

Это потому, что brand поле анализируется и, таким образом, получает ABC лексемы и индексируются abc, следовательно, почему поиск для termabc возвращается хитов в то время как ABC не делает.

Для того, чтобы изменить это поведение, вы можете создать под-поле для поля brand, которое равно not_analyzed, и вы сможете также просмотреть форму прописной буквы.

curl -XPUT localhost:9200/my_index/my_type/_mapping -d '{ 
    "properties": { 
     "brand": { 
      "type": "string", 
      "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
      } 
     } 
    } 
}' 

Если вы запустите команду выше и повторно индекса данных, вы затем сможете найти

['term' => ['brand.raw' => 'ABC']] 

Обратите внимание, что вы можете также использовать match запросов (см ниже) на brand, и они вернут матчи.

['match' => ['brand' => 'abc']] 
['match' => ['brand' => 'ABC']] 
+0

это отличное объяснение. Спасибо. теперь я знаю, что он индексируется как строчный. – KristCont

+0

Рад, что это помогло! – Val

+0

Я новичок в поиске elastics и все еще изучаю его. У меня еще несколько вопросов для публикации. – KristCont

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