[英]Mapping multiple fields to one index with elasticsearch-rails
如何將以下三個字段映射到一個稱為“實體”的索引? 以下代碼僅導致三個索引中的第一個索引。 目標是能夠將這三個字段中的任何一個作為“實體”進行查詢。
indexes :thing1, index_name: "entity" do
indexes :name, type: 'string', boost: 1.0
end
indexes :thing2, index_name: "entity" do
indexes :name, type: 'string', boost: 2.0
end
indexes :thing3, index_name: "entity" do
indexes :name, type: 'string', boost: 0.2
end
看一下多字段映射
"title": {
"type": "string",
"fields": {
"raw": { "type": "string", "index": "not_analyzed" }
}
}
希望我能理解您的問題。
如果只需要一個索引,稱為“實體”,則將三個文檔類型(thing1,thing2和thing3)索引到其中; 並且每種文檔類型都映射為具有一個名為“名稱”的屬性,那么您的設置可能是正確的(我不知道ruby界面)。 您可以將搜索查詢發布到索引“實體”,而無需指定文檔類型或指定要搜索的所有類型。
查詢的正文將指定“名稱”字段作為術語/匹配/任何目標。
{
"query": {
"match" : {
"name" : "Happy the Client"
}
}
}
請參閱此處以在搜索URL中指定多個索引/類型: http : //www.elasticsearch.org/guide/zh-CN/elasticsearch/guide/current/multi-index-multi-type.html
在所有索引中搜索所有類型
http://localhost:9200/_search
在索引“實體”中搜索所有類型:
http://localhost:9200/entity/_search
在索引“實體”中搜索指定的類型:
http://localhost:9200/entity/thing1,thing2,thing3/_search
也許(如果您沒有要忽略的東西4):
http://localhost:9200/entity/thing*/_search
您會在上面的鏈接中注意到,即使將它們放在不同的索引中,也可以通過單個查詢完成搜索多種文檔類型的目標。 如果每個文檔類型實際上都是在索引中排他地索引,且其名稱與類型名稱匹配,則可以將相同的“名稱”查詢發送到以下URL:
搜索所有索引中的所有類型:
http://localhost:9200/_search
搜索指定索引中的所有類型:
http://localhost:9200/thing1,thing2,thing3/_search
在指定索引中搜索指定類型:
http://localhost:9200/thing1,thing2,thing3/thing1,thing2,thing3/_search
在所有索引中搜索指定的類型:
http://localhost:9200/_all/thing1,thing2,thing3/_search
在我認為您描述過的場景中,您有一個方便的事實,即每種文檔類型都有一個通用的屬性名稱“名稱”。
如果您是人為地提供了該約束以簡化問題,那么我想談談另一個功能。 假設每種文檔類型的屬性名稱都不同。 類型“ thing1”具有字符串屬性“ name1”,類型“ thing2”具有字符串屬性“ name2”,類型“ thing3”具有字符串屬性“ name3”。 我們希望有一個像上面的查詢這樣的通用查詢,可以搜索所有這些類型。
{
"query": {
"match" : {
"name" : "Happy the Client"
}
}
}
為此,具有“ copy_to”功能: http ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#copy-to
場景中的映射如下所示:
{
"thing1" : {
"properties" : {
"name1" : { "type" : "string", "copy_to" : "name" },
"name" : { "type" : "string" }
}
}
{
"thing2" : {
"properties" : {
"name2" : { "type" : "string", "copy_to" : "name" },
"name" : { "type" : "string" }
}
}
{
"thing3" : {
"properties" : {
"name3" : { "type" : "string", "copy_to" : "name" },
"name" : { "type" : "string" }
}
}
搜索網址將遵循與上述相同的指導原則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.