2012-06-05 3 views
9

Извините, я новичок в ElasticSearch.Путаница между отображениями и типами в ElasticSearch

http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping.html

Этот документ говорит, что вы можете "создает отображение под названием твит в пределах индекса твиттер"

$ curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d ' 
{ 
    "tweet" : { 
     "properties" : { 
      "message" : {"type" : "string", "store" : "yes"} 
     } 
    } 
} 
' 

Как кто-то сказал мне на IRC канале ES,/Twitter/твит твиттер = индекс, чирикать = тип

Но что произойдет, если я сделаю следующее?

$ curl -XPUT 'http://localhost:9200/twitter/XXX/_mapping' -d ' 
{ 
    "YYY" : { 
     "properties" : { 
      "message" : {"type" : "string", "store" : "yes"} 
     } 
    } 
} 
' 

Если я уже предоставил имя типа в URL-адресе, почему я должен предоставить имя типа в контенте? Если я обеспечиваю имя типа в содержании, почему я не могу просто назвать некоторые URL, как:

$ curl -XPUT 'http://localhost:9200/twitter/_mapping' -d ' 

При чтении документа, для меня это говорит, что «создает отображение под названием твит в индексе твиттера», это означает, что XXX - это имя отображения, а YYY - это имя типа.

Таким образом, если есть имя отображения, может обычно быть много «отображения» для индекса

Таким образом, в конце концов, XXX и YYY является/должна быть таким же?


Это не то, что я понял из док, но то, что я думаю: - один индекс может иметь типы - Типы есть отображение Таким образом, мы не создаем отображение, как сказано в документации, но мы создаем тип, который имеет сопоставление, или мы обновляем отображение типа нет?

И в индексе, где я не хочу использовать какой-либо тип (все индексированные документы являются данными одного и того же типа), но я хочу создать сопоставление для этого индекса, я должен обрабатывать это, создавая только один тип с его отображением и всегда использовать этот тип (например, в реке CouchDB)?

Благодаря

ответ

10

В текущей версии поиска elasticsearch (0.19.4) «YYY» игнорируется, и отображение присваивается типу «XXX».

Действительно, вы можете думать о создании сопоставлений как создающих типов. Внутри типы представлены в виде сопоставлений, и документация просто отражает это поведение. Если все ваши записи имеют один и тот же тип, вы должны рассматривать индекс как индекс только с одним типом. Тип используется для записей «namespace» разных типов, и поэтому он является обязательным. Сам идентификатор не однозначно идентифицирует запись. Чтобы идентифицировать запись в elasticsearch, вам нужно иметь индекс, тип и идентификатор. Вот почему тип является требуемым параметром для операции get, например. Для других операций, если тип не указан, elasticsearch предполагает, что вы хотите выполнить операцию с записями всех типов.

Обратите внимание, что эти типы также могут быть созданы динамически в любое время путем добавления записи нового типа. Таким образом, индекс только с одним типом является индексом, который не имеет второго типа , но.

+0

спасибо, что мне говорят журналы. –

+0

Не знаете, знаете ли вы, но при создании индекса можно установить все сопоставления, и он имеет гораздо более интуитивно понятный API. См. Раздел «Сопоставление» на этой странице: http: // www.elasticsearch.org/guide/reference/api/admin-indices-create-index.html – imotov

+0

Да, я это заметил. Но на самом деле я хотел бы создать реку CouchDB, и я не думаю, что могу создать отображение индекса + с рекой CouchDB. Думаю, я должен сначала создать индекс + отображение (1 шаг или 2), а затем реку. –