在Elasticsearch

时间:2016-10-25 17:30:58

标签: elasticsearch

我将记录存储在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条记录显然要容易得多,因为它的设计是;但这不符合我的要求。

0 个答案:

没有答案