让我们说我使用这种映射:
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
哪会让我回复:
{
"_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"
]
}
}
]
}
}
所以我的问题是如何在弹性搜索中存储我的分析器生成的结果?
答案 0 :(得分:1)
您可以设置索引或查询时间分析器。如果您使用索引时间分析器,则将存储分析的文本。
更多详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html
另一种方法是使用多字段。这意味着您拥有原始文本和处理过的文本。
更多详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
答案 1 :(得分:1)
您的问题是存储的文本与生成的标记之间的区别: the store attribute of a lucene field
存储的字段与" _source" -JSON中的相应字段完全相同。
生成的令牌位于lucene内部表示中。但您可以使用_analyze
或_termvectors
端点查看令牌
或者您可以使用term-aggregation