如何创建ElasticSearch类型并使其在索引中可搜索

时间:2017-01-19 04:17:40

标签: curl elasticsearch types document datamodel

我是iOS Swift开发人员,我在我的应用中使用ElasticSearch。我试图围绕如何在type中声明EStypedocument之间有什么区别,哪个与{object/data model最相似? {1}}。

Swift我会像这样创建objectdata model

class Sneakers {
       var condition: String?
       var name: String?
}

这就是说我创建了一个名为Sneakers的对象,其中包含2个属性:“condition”和“name”两个Optional(问号)类型String

我知道创建并将我的ES设置为Index我使用以下内容:

curl -XPOST <bonsai_url>/myIndexName //I'm using Heroku & Bonsai for my ES cluster

然后我可以设置类似的类型

curl -XPOST <bonsai_url>/myIndexName/sneakerType

我迷失的地方是如何设置索引以使用我的Sneakers数据模型作为搜索参考?在我的应用程序内,用户可以根据运动鞋名称(耐克,阿迪达斯等)和条件(旧的,新的,使用过的等)搜索鞋类。

我知道这有点像

curl -XPOST <bonsai_url>/myIndexName/sneakerType -d '
{
   "sneakers": {
      "properties": {
        "condition": {
          "type": string
        },
        "name": {
          "type": string
        }
      }
   }
}
'

我的问题将出现在ES中:

  1. typedocument
  2. 之间的区别是什么
  3. fields会等同于properties吗?
  4. 创建index名称和type后,如何将type设为data model 请参阅我的properties及其_mapping,以便可以搜索
  5. 我的最后一个问题是#UniqueUsageFkAndBuildingFk是什么,我应该在我的curl命令中使用它吗?

1 个答案:

答案 0 :(得分:3)

ES中,type相当于class/data model/object

ES中,fields等同于类/数据模型/对象的properties

document是在索引中实际搜索到的内容的结果。如果在index内有2对Sneaker types,则index内部会有2 documents

Mappings是1-如何在type内部index搜索index以及如何设置type以便fieldsobject/data model properties等同于type,它是fields。这个typesneakerfile.json就是您要进行搜索的内容。

我首先通过创建名为{ "sneakers": { // this is a type "properties": { "condition": { // it has a field named ‘condition’ "type": "string" }, "name": { // it has a field named ‘name’ "type": "string" } } } } // sneakers is being treated like my Sneakers Swift class/dataModel from the original question // the fields “condition” & “name” are of type String just like my Swift's Sneakers’ class' properties (since Optionals are a Swift thing that’s not included here) 的文件创建了ES index 并在其中添加了此代码

firebase

然后在终端内部我通过运行:

创建名为curl -XPOST <BONSAI_URL>/firebase 的{​​{1}}
index

1-现在,我有一个名为firebase的{​​{1}},一个名为ES type的{​​{1}},我现在需要sneakers可以在type中搜索{4}填充index密钥:

_mappings

现在,我希望在运行时查看curl -XPOST <BONSAI_URL>/firebase/_mappings/sneakers -d@sneakerfile.json 键内的内容:

mappings

我会得到

curl -XGET <BONSAI_URL>/firebase/_mappings?pretty

请注意上述答案{ "firebase" : { "mappings" : { "sneakers" : { "properties" : { "condition" : { "type" : "string" }, "name" : { "type" : "string" } } } } } } // Final Result -the index named firebase now can return documents of type ‘sneakers’. You can search for those documents by searching on the ‘condition’ and ‘name’ fields ,以便您可以使用它。我在2年多的时间里没有回到这个答案,但可能尝试创建另一个definitely 100% works并将type设置为这样的sneakersTestFile.json TEST TEST TEST 看看会发生什么。我自己没有尝试过这个,但我知道它更容易阅读。

{
   "sneakersTest": {
        "condition": "string"
        "name": "string"
   }
}

假设您已经创建了名为index的{​​{1}}运行:

firebase

然后运行:

curl -XPOST <BONSAI_URL>/firebase/_mappings/sneakersTest -d@sneakersTestFile.json

搜索它以查看会发生什么