如何存储分析仪生成的内容?

时间:2017-08-29 07:38:34

标签: elasticsearch analyzer stop-words

让我们说我使用这种映射:

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"
          ]
        }
      }
    ]
  }
}

所以我的问题是如何在弹性搜索中存储我的分析器生成的结果?

2 个答案:

答案 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