我正在开发一个项目,我大量使用Elasticsearch并利用moreLikeThis查询来实现某些功能。 MLT查询的官方文档说明如下:
为了加速分析,它可以帮助存储术语向量 索引时间,但以磁盘使用为代价。
在**如何运作*部分。现在的想法是调整映射,以便存储预先计算的术语向量。问题是文档中似乎不清楚应该如何做到这一点。一方面,在MLT文档中,它们提供了如下所示的示例映射:
curl -s -XPUT 'http://localhost:9200/imdb/' -d '{
"mappings": {
"movies": {
"properties": {
"title": {
"type": "string",
"term_vector": "yes"
},
"description": {
"type": "string"
},
"tags": {
"type": "string",
"fields" : {
"raw": {
"type" : "string",
"index" : "not_analyzed",
"term_vector" : "yes"
}
}
}
}
}
}
}
另一方面,在Term Vectors documentation中,他们在示例1 部分中提供了一个如下所示的映射
curl -s -XPUT 'http://localhost:9200/twitter/' -d '{
"mappings": {
"tweet": {
"properties": {
"text": {
"type": "string",
"term_vector": "with_positions_offsets_payloads",
"store" : true,
"index_analyzer" : "fulltext_analyzer"
},
"fullname": {
"type": "string",
"term_vector": "with_positions_offsets_payloads",
"index_analyzer" : "fulltext_analyzer"
}
}
}
....
这应该是create an index that stores term vectors, payloads etc.
现在问题是:应该使用哪个映射?这是文档中的缺陷还是我遗漏了什么?
答案 0 :(得分:9)
你说得对,它似乎没有在当前版本的文档中明确提到,但是在即将发布的版本2.0 documents中有更详细的解释。
术语向量包含有关由术语生成的术语的信息 分析过程,包括:
- 条款清单。
- 每个词的位置(或顺序)。
- 将字词映射到原始字符串中的原点的开始和结束字符偏移量。
可以存储这些术语向量,以便可以检索它们 特别文件。
term_vector
设置接受:
no
:不存储术语向量。 (默认)yes
:只存储字段中的字词with_positions
:存储条款和排名with_offsets
:存储术语和字符偏移with_positions_offsets
:存储条款,职位和字符抵消