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

How to create an ElasticSearch Type and make it searchable inside the Index

我是一名 iOS Swift 开发人员,我在我的应用程序中使用 ElasticSearch。我正在思考如何在 ES 中声明 typetypedocument 之间的区别是什么,哪个与 object/data model.

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 modelproperties 这样可以搜索到
  5. 我的最后一个问题是 _mapping 有什么用,我应该在我的 curl 命令中使用它吗?

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

ES中,fields相当于class/datamodel/object的properties

A document 是在索引中实际搜索的结果。如果 index 里面有 2 双运动鞋 types 那么 index 里面会有 2 documents

Mappings 是 1- 如何使 typeindex 中可搜索,以及 2- 如何设置 index 以便 type它的 fields 将等同于 object/data model 及其 propertiestype 及其 fields 是您要运行 搜索的内容。

我首先通过创建一个名为 sneakerfile.json 的文件创建了一个 type 并在其中添加了这段代码

{
   "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 由 运行ning 命名为 firebase:

curl -XPOST <BONSAI_URL>/firebase

1- 现在我有一个名为 firebaseindex,2- 一个名为 sneakersES type,3- 我现在需要制作 type 可在 index 中搜索,方法是 4- 用它填充 _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

作为旁注上面的答案 definitely 100% works 所以你可以使用它。我已经 2 年多没有回到这个答案了,但也许可以像这样尝试创建另一个 type 并将其设置为 sneakersTestFile.json测试测试测试 看看会发生什么。我自己没有在下面尝试过这个,但我知道它更容易阅读。

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

假设您已经创建了名为 firebase 运行:

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

然后运行:

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

搜索它看看会发生什么