2016-05-30 2 views
0

У меня есть репозиторий Elasticsearch и приложение, которое создает документы для того, что мы называем «активами». Мне нужно запретить пользователям создавать «активы» с тем же «заголовком».Elasticsearch соответствует точной терминологии

Когда пользователь пытается создать «актив», я запрашиваю репо с заголовком, и если есть соответствие, пользователю отображается сообщение об ошибке.

Моя проблема в том, что когда я запрашиваю заголовок, я получаю несколько результатов (для аналогичных совпадений).

Это мой запрос до сих пор:

GET assets-1/asset/_search 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "test", 
     "operator": "and" 
     } 
    } 
    } 
} 

У меня есть много записей с названием: «тест-1», «Тест 2», «тест-бла», и только один с «тест» заголовка.

Но я получаю все вышеперечисленное.

Есть ли какое-либо условие или свойство, которое я должен добавить к запросу, поэтому я буду точно соответствовать термину?

ответ

0

Ваше поле заголовка, вероятно, проанализировано и, таким образом, токен test будет соответствовать любому заголовку, содержащему этот токен.

Для осуществления точного соответствия вам необходимо иметь поле not_analyzed и выполнить запрос term.

Вы должны изменить отображение вашего title поля следующим образом:

curl -XPUT localhost:9200/assets-1/_mapping/asset -d '{ 
    "asset": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
      } 
     } 
     } 
    } 
}' 

Затем вам нужно индексировать ваши данные, и тогда вы будете иметь возможность запускать точный запрос матча, как это:

curl -XPOST localhost:9200/assets-1/asset/_search -d '{ 
    "query": { 
     "term": { 
     "title.raw": "test" 
     } 
    } 
}' 
+0

спасибо + Вал, поле уже «не_аналитировано», но часть «.raw» сделала трюк. – Yatiac

+0

Удивительный, рад, что вы это поняли !! – Val

+0

Еще одна вещь, есть ли способ сделать это не чувствительным к регистру? – Yatiac

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