如何存储分析器生成的内容?
How to store what is generated by the analyser?
假设我使用这个映射:
PUT test
{
"settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
}
},
"mappings": {
"testtype": {
"properties": {
"content": {
"type": "text",
"analyzer": "english",
"store": true
}
}
}
}
}
现在我可以索引文档了:
PUT test/testtype/0
{
"content": "The Quick Brown Box"
}
而且我可以取回它:
GET test/testtype/0
哪个 return 我:
{
"_index": "test",
"_type": "testtype",
"_id": "0",
"_version": 1,
"found": true,
"_source": {
"content": "The Quick brown Fox"
}
}
我知道在源字段中您应该只有插入的文档,这就是为什么我在映射中指定要存储内容字段的原因。因此,通过查询我的商店字段,我希望其中包含分析器生成的内容,如下所示:
"quick brown fox"
但是当我查询存储字段时:
GET test/testtype/_search
{
"stored_fields": "content"
}
我在文档中写的完全一样:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test",
"_type": "testtype",
"_id": "0",
"_score": 1,
"fields": {
"content": [
"The Quick brown Fox"
]
}
}
]
}
}
所以我的问题是如何将分析器生成的结果存储在我的 elasticsearch 中?
您可以设置索引或查询时间分析器。如果您使用的是索引时间分析器,那么分析的文本将被存储。
更多详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html
另一种方法是使用多字段。这意味着您拥有原始文本和处理后的文本。
更多详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
您的问题是关于存储的文本和生成的标记之间的区别:
the store attribute of a lucene field
存储的字段包含与“_source”中相应字段完全相同的内容-JSON。
生成的令牌在 lucene 内部表示中。但是您可以使用 _analyze
or _termvectors
端点来查看令牌
或者您可以使用 term-aggregation
假设我使用这个映射:
PUT test
{
"settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
}
},
"mappings": {
"testtype": {
"properties": {
"content": {
"type": "text",
"analyzer": "english",
"store": true
}
}
}
}
}
现在我可以索引文档了:
PUT test/testtype/0
{
"content": "The Quick Brown Box"
}
而且我可以取回它:
GET test/testtype/0
哪个 return 我:
{
"_index": "test",
"_type": "testtype",
"_id": "0",
"_version": 1,
"found": true,
"_source": {
"content": "The Quick brown Fox"
}
}
我知道在源字段中您应该只有插入的文档,这就是为什么我在映射中指定要存储内容字段的原因。因此,通过查询我的商店字段,我希望其中包含分析器生成的内容,如下所示:
"quick brown fox"
但是当我查询存储字段时:
GET test/testtype/_search
{
"stored_fields": "content"
}
我在文档中写的完全一样:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test",
"_type": "testtype",
"_id": "0",
"_score": 1,
"fields": {
"content": [
"The Quick brown Fox"
]
}
}
]
}
}
所以我的问题是如何将分析器生成的结果存储在我的 elasticsearch 中?
您可以设置索引或查询时间分析器。如果您使用的是索引时间分析器,那么分析的文本将被存储。
更多详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html
另一种方法是使用多字段。这意味着您拥有原始文本和处理后的文本。
更多详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
您的问题是关于存储的文本和生成的标记之间的区别: the store attribute of a lucene field
存储的字段包含与“_source”中相应字段完全相同的内容-JSON。
生成的令牌在 lucene 内部表示中。但是您可以使用 _analyze
or _termvectors
端点来查看令牌
或者您可以使用 term-aggregation