簡體   English   中英

使用elasticsearch-rails將多個字段映射到一個索引

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM