如何创建 ElasticSearch 类型并使其在索引内可搜索
How to create an ElasticSearch Type and make it searchable inside the Index
我是一名 iOS Swift
开发人员,我在我的应用程序中使用 ElasticSearch
。我正在思考如何在 ES
中声明 type
,type
和 document
之间的区别是什么,哪个与 object/data model
.
在 Swift
中,我会像这样创建一个 object
或 data 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 中:
type
和 document
有什么区别
-
fields
是否等同于 properties
?
- 在我创建
index
名称和 type
之后,如何将 type
设置为
参考我的 data model
是 properties
这样可以搜索到
- 我的最后一个问题是
_mapping
有什么用,我应该在我的 curl 命令中使用它吗?
在ES
中,type
相当于class/data model/object
。
在ES
中,fields
相当于class/datamodel/object的properties
。
A document
是在索引中实际搜索的结果。如果 index
里面有 2 双运动鞋 types
那么 index
里面会有 2 documents
。
Mappings
是 1- 如何使 type
在 index
中可搜索,以及 2- 如何设置 index
以便 type
它的 fields
将等同于 object/data model
及其 properties
。 type
及其 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- 现在我有一个名为 firebase
的 index
,2- 一个名为 sneakers
的 ES 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
搜索它看看会发生什么
我是一名 iOS Swift
开发人员,我在我的应用程序中使用 ElasticSearch
。我正在思考如何在 ES
中声明 type
,type
和 document
之间的区别是什么,哪个与 object/data model
.
在 Swift
中,我会像这样创建一个 object
或 data 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 中:
type
和document
有什么区别
-
fields
是否等同于properties
? - 在我创建
index
名称和type
之后,如何将type
设置为 参考我的data model
是properties
这样可以搜索到 - 我的最后一个问题是
_mapping
有什么用,我应该在我的 curl 命令中使用它吗?
在ES
中,type
相当于class/data model/object
。
在ES
中,fields
相当于class/datamodel/object的properties
。
A document
是在索引中实际搜索的结果。如果 index
里面有 2 双运动鞋 types
那么 index
里面会有 2 documents
。
Mappings
是 1- 如何使 type
在 index
中可搜索,以及 2- 如何设置 index
以便 type
它的 fields
将等同于 object/data model
及其 properties
。 type
及其 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- 现在我有一个名为 firebase
的 index
,2- 一个名为 sneakers
的 ES 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
搜索它看看会发生什么