elasticsearch,Lucene,elasticsearch" /> elasticsearch,Lucene,elasticsearch" />

Lucene 非索引字段存储在索引中

Lucene 非索引字段存储在索引中,lucene,elasticsearch,Lucene,elasticsearch,我正在尝试优化我的elasticsearch方案 我有一个字段,它是一个URL-我不想能够查询或过滤它,只是检索它 我的理解是,定义为“index”:“no”的字段没有索引,但仍然存储在索引中。 (请参见中的幻灯片5) 这应该和Lucene的未索引匹配,对吗 这让我很困惑,有没有一种方法可以存储某些字段,而不会占用比其内容更多的存储空间,也不会妨碍其他字段的索引 我缺少什么?您正在查找'index'=>“not_analysisted'映射选项 此外,如果使用\u源代码,则不必指定存储=>fal

我正在尝试优化我的elasticsearch方案

我有一个字段,它是一个URL-我不想能够查询或过滤它,只是检索它

我的理解是,定义为
“index”:“no”
的字段没有索引,但仍然存储在索引中。 (请参见中的幻灯片5) 这应该和Lucene的未索引匹配,对吗

这让我很困惑,有没有一种方法可以存储某些字段,而不会占用比其内容更多的存储空间,也不会妨碍其他字段的索引


我缺少什么?

您正在查找
'index'=>“not_analysisted'
映射选项


此外,如果使用
\u源代码,则不必指定
存储=>false
选项。

有两种方法将数据输入索引。索引和存储。索引一段数据意味着它被标记化,并放置在反向索引中,并且可以进行搜索。存储数据意味着它不会被标记化、分析或任何东西,也不会被添加到反向索引中。它以全文形式存储在一个完全独立的区域中。不能对其进行搜索,但可以通过其文档ID以其原始形式检索

典型的Lucene查询过程是查询索引数据,获取匹配文档的返回文档ID,然后使用这些文档ID检索这些文档的存储数据,并将其显示给用户

已编制索引但未存储的数据是可搜索的,但无法以原始形式检索

一旦您找到了一个命中,就可以检索已存储但未编入索引的数据,但不可搜索

可以搜索或检索索引和存储的数据

两者都不是的数据根本无法添加到索引中


这一点在。

中有一点介绍。我不熟悉在stack exchange上发布,但相信我能帮上一点忙

这里有一些注意事项:

分析 因为您不想做额外的工作,所以应该设置
“索引”:“否”
。这意味着该字段将不会通过任何标记器和过滤器运行

此外,当将查询指向特定字段时,将不可搜索:(无点击)

*这里的“url”是字段名

但是,该字段仍可以在
\u all
字段中搜索(可能有点击)

\u所有
字段 默认情况下,每个字段都放在
\u all
字段中。设置
“include\u in\u all”:“false”
以停止该操作。这可能不是您的问题,因为您不太可能错误地使用URL搜索
\u all
字段

我使用的是一个模式,其中国家存储为两个字母的代码,例如:“否”表示挪威,可能有人会用“否”搜索所有字段,因此我确保设置
“include\u in\u all”:“false”

注意:未明确指定字段的任何查询都将针对
\u all
字段执行

储存 默认情况下,elasticsearch将存储您的整个文档(在发送时未分析),并将在hit的
\u source
字段中返回给您。如果您关闭此选项(如果您的elasticsearch数据库可能变得巨大?),则需要显式设置
“存储”:“yes”
,以单独存储字段。(需要注意的是,
store
接受
yes
no
而不是
true
false
——这让我大吃一惊!)

注意:如果这样做,则需要请求显式返回给您的字段。e、 g:

curl -XGET http://path/index_name/type_name/id?fields=url,another_field
最后 我会让elasticsearch存储整个文档(作为默认值),并使用以下映射

"type_name": {
    "properties": {
        "url": {
            "type": "string",
            "index": "no",
            "include_in_all": "false"
        },
        // other fields' mappings
    }
}

来源:

我犯了一个错误,写了“存储”而不是“索引”,修复了它。我想要的是能够检索url,但不能根据它进行过滤,当然也不能对其进行分析。我的困惑是,“不是索引而是存储在索引中”这句话太棒了!!!如果我理解正确,将分析并索引
\u all
字段中的任何内容。因此,如果我使用
“index”:“no”
,但忘记设置“include_in_all”:“false”,那么该字段实际上将被索引,从而导致数据库大小大幅增加?实际上,我错了,如果您设置
“index”:“no”
,它似乎也设置了
“include_in_all”:“false”
。但是,您似乎可以同时设置
{“index”:“no”,“include_in_all”:“true”}
,并且在使用确切字符串查询
\u all
字段时,您将看到一个小技巧。基于ElasticSearch 6+构建的索引没有“u all”字段。
curl -XGET http://path/index_name/type_name/id?fields=url,another_field
"type_name": {
    "properties": {
        "url": {
            "type": "string",
            "index": "no",
            "include_in_all": "false"
        },
        // other fields' mappings
    }
}