2013-03-18 3 views
0

Скажем, у меня есть список названий книг, и я хочу найти, какие из них существуют в моем индексе.Поиск частей списка в elasticsearch

отображение является:

"book": { 
    "properties": { 
        "title":{"type":"string"}, 
        "author":{"type":"string"}}} 

Я мог бы итерацию и проверить каждый из них с

curl -XPOST 'localhost:9200/myindex/book/_search' 
-d '{"query":{"match":{"title":"my title"}}} 

Но если предположить, список названий я долго, как я могу это сделать оптом и получить список из которых попало?

ответ

0

Выполнить несколько match запросов к названию поля, комбинируя их с bool запроса:

curl -XGET 'http://127.0.0.1:9200/myindex/book/_search?pretty=1' -d ' 
{ 
    "query" : { 
     "bool" : { 
     "should" : [ 
      { 
       "match" : { 
        "title" : "Title one" 
       } 
      }, 
      { 
       "match" : { 
        "title" : "Title two" 
       } 
      }, 
      { 
       "match" : { 
        "title" : "Title three" 
       } 
      } 
     ] 
     } 
    } 
} 
' 

Конечно, match запрос будет совпадать с любыми книгами, чьи title поле содержит одно слово в строке запроса, так вы можете использовать вместо match_phrase:

curl -XGET 'http://127.0.0.1:9200/myindex/book/_search?pretty=1' -d ' 
{ 
    "query" : { 
     "bool" : { 
     "should" : [ 
      { 
       "match_phrase" : { 
        "title" : "Title one" 
       } 
      }, 
      { 
       "match_phrase" : { 
        "title" : "Title two" 
       } 
      }, 
      { 
       "match_phrase" : { 
        "title" : "Title three" 
       } 
      } 
     ] 
     } 
    } 
} 
' 

Это будет искать точную фразу: одни и те же слова в том же порядке.

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