gpt4 book ai didi

elasticsearch - 如何在 elasticsearch _source 中存储数据但不对其进行索引?

转载 作者:行者123 更新时间:2023-11-29 02:44:42 28 4
gpt4 key购买 nike

我仅通过几个字段进行搜索,但我希望能够将整个文档存储在 ES 中,以免进行额外的 DB (MySQL) 查询。

我尝试将 index: nostore: no 添加到映射中的整个对象/属性,但我仍然不确定这些字段是否被索引并添加不必要的开销。

假设我有几本书,每本书都有一位作者。我只想按书名搜索,但我希望能够检索到整个文档。

这样可以吗:

mappings:
properties:
title:
type: string
index: analyzed
author:
type: object
index: no
store: no
properties:
first_name:
type: string
last_name:
type: string

或者我应该这样做:

mappings:
properties:
title:
type: string
index: analyzed
author:
type: object
properties:
first_name:
index: no
store: no
type: string
last_name:
index: no
store: no
type: string

或者也许我做的完全错了?那些不应被索引的嵌套属性呢?

最佳答案

默认情况下,文档的 _source 会被存储,而不管您选择索引的字段是什么。 _source 用于返回搜索结果中的文档,而索引的字段用于搜索。

你不能在一个对象上设置index: no来阻止一个对象中的所有字段被索引,但是你可以用Dynamic Templates做你想做的事。使用 path_match 属性将 index: no 设置应用于对象中的每个字段。这是一个简单的例子。

使用包含author 对象和嵌套的categories 对象的动态模板的映射创建索引:

POST /shop
{
"mappings": {
"book": {
"dynamic_templates": [
{
"author_object_template": {
"path_match": "author.*",
"mapping": {
"index": "no"
}
}
},
{
"categories_object_template": {
"path_match": "categories.*",
"mapping": {
"index": "no"
}
}
}
],
"properties": {
"categories": {
"type": "nested"
}
}
}
}
}

索引文档:

POST /shop/book/1
{
"title": "book one",
"author": {
"first_name": "jon",
"last_name": "doe"
},
"categories": [
{
"cat_id": 1,
"cat_name": "category one"
},
{
"cat_id": 2,
"cat_name": "category two"
}
]
}

如果您使用搜索词 booktitle 字段上进行搜索,将返回文档。如果您搜索 author.first_nameauthor.last_name,将不会有匹配项,因为这些字段未编入索引:

POST /shop/book/_search
{
"query": {
"match": {
"author.first_name": "jon"
}
}
}

类别字段的嵌套查询也是如此:

POST /shop/book/_search
{
"query": {
"nested": {
"path": "categories",
"query": {
"match": {
"categories.cat_name": "category"
}
}
}
}
}

您也可以使用 Luke工具来期待 Lucene 索引并查看哪些字段已被索引。

关于elasticsearch - 如何在 elasticsearch _source 中存储数据但不对其进行索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561230/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com