2015-03-03 3 views
1

Я проиндексировал данные в elasticsearch. Имя индекса - «demo». У меня есть два типа (сопоставления) для «демо», один - «пользователь», а другой - «блог». «user» type имеют поля - имя, город, страна, другие поля и блог - «title», description »,« author_name »и т. Д. Теперь я хочу найти« demo ». Если я хочу искать« java », то он принесет все документы, которые имеют «java» в любых полях любого типа, либо «пользователь», либо «блог».Elasticsearch - поиск по нескольким нескольким типам индекса и его различным типам

+0

Какое решение у вас? – bittusarkar

ответ

6

Для этого индекса можно использовать "_all" field. По умолчанию каждое из ваших полей будет включено в "_all" поле для каждого типа. Тогда вы можете просто запустить match запрос к "_all" полю. Кроме того, при поиске индекса, просто не указать тип и будут искать все типы.

Вот пример :

DELETE /test_index 

PUT /test_index 
{ 
    "settings": { 
     "number_of_shards": 1 
    }, 
    "mappings": { 
     "user": { 
     "properties": { 
      "name" : { "type": "string" }, 
      "city" : { "type": "string" }, 
      "country" : { "type": "string" } 
     } 
     }, 
     "blog": { 
     "properties": { 
      "title" : { "type": "string" }, 
      "description" : { "type": "string" }, 
      "author_name" : { "type": "string" } 
     } 
     } 
    } 
} 

POST /test_index/_bulk 
{"index":{"_index":"test_index","_type":"user"}} 
{"name":"Bob","city":"New York","country":"USA"} 
{"index":{"_index":"test_index","_type":"user"}} 
{"name":"John","city":"Jakarta","country":"Java/Indonesia"} 
{"index":{"_index":"test_index","_type":"blog"}} 
{"title":"Python/ES","description":"using Python with Elasticsearch","author_name":"John"} 
{"index":{"_index":"test_index","_type":"blog"}} 
{"title":"Java/ES","description":"using Java with Elasticsearch","author_name":"Bob"} 

POST /test_index/_search 
{ 
    "query": { 
     "match": { 
      "_all": "Java" 
     } 
    } 
} 
... 
{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
     "total": 1, 
     "successful": 1, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 2, 
     "max_score": 0.68289655, 
     "hits": [ 
     { 
      "_index": "test_index", 
      "_type": "blog", 
      "_id": "hNJ-AOG2SbS0nw4IPBuXGQ", 
      "_score": 0.68289655, 
      "_source": { 
       "title": "Java/ES", 
       "description": "using Java with Elasticsearch", 
       "author_name": "Bob" 
      } 
     }, 
     { 
      "_index": "test_index", 
      "_type": "user", 
      "_id": "VqfowNx8TTG69buY9Vd_MQ", 
      "_score": 0.643841, 
      "_source": { 
       "name": "John", 
       "city": "Jakarta", 
       "country": "Java/Indonesia" 
      } 
     } 
     ] 
    } 
} 
Смежные вопросы