我将记录存储在Elasticsearch中:
"mappings": {
"en": {
"_timestamp": {
"enabled": true
},
"_all": {
"enabled": false
},
"properties": {
"id": {
"type": "string",
"index": "analyzed"
},
"text": {
"type": "string",
"index": "analyzed",
"analyzer": "english"
}
}
}
}
其中每个弹性搜索记录实际上是多个记录捆绑在一起,方法是让id
字段包含一个id [id1, id2, id3, ...]
数组,text
字段包含其各自的文本['text 1', 'text 2', 'text 3', ...]
,所以POST
看起来像是:
POST my-index/en
{
"id": ["{doc1-ID}", "{doc2-ID}"],
"text": ["document 1 text goes here", "document 2 text goes here"]
}
我正在text
字段中搜索文本,这一切都没问题,除了我需要匹配id
值的匹配文档。我可以通过遍历每个数组项在app逻辑本身内执行此操作,但这非常昂贵且效率低,因为每个Elasticsearch记录将接近~2GB的最大大小,因此在我搜索所有内容时将其存储在内存中只是简单的不是一种选择。我正在尝试找到一种从text
数组字段中检索匹配文本的数组索引的方法,以便我可以抓住它的相应id
。有没有办法使用某种Elasticsearch脚本获取匹配文本的数组索引?
注意:我出于一个非常好的理由以这种看似错综复杂的方式存储我的文档,我意识到每个弹性搜索记录有1条记录显然要容易得多,因为它的设计是;但这不符合我的要求。