Q:非洲食人族的酋长吃什么?

[急急急] 请问下字段的position data可以手动修复么?

Elasticsearch | 作者 dotNetDR_ | 发布于2019年04月25日 | 阅读数:2535

今天手残把集群里某个索引下大字段xxx (type:text, analyzer:ik_max_word) 的index_options属性由默认的positions改为offsets,跑了一段时间后,因误操作将index_options修改为docs(本来应该是改回positions),接着跑了一段时间发现错误后,再改为offsets。
 
现在不能对xxx字段使用match_phrase查询了但可以进行match查询,match_phrase查询会提示,
field \"xxx\" was indexed without position data; cannot run PhraseQuery (phrase=content:\"词1 词2\")

现在问下大大门,能手动修复么?我更新了一部分的文档发现不起作用,除了reindex还有救么?
---
搜了下lucene源码,觉得是某些数据的IndexOptions不是 DOCS_AND_FREQS_AND_POSITIONS , DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS导致的。

20190425193603.jpg


20190425194256.jpg


20190425194330.jpg

 
已邀请:

liuzhen6835

赞同来自:

好像没有办法;不知道大神是不是有什么好办法

dotNetDR_ - elasticsearch 6.x

赞同来自:

本案例中,由于将index_options设置成了docs,导致有一批文档进行索引时没有存position data,使得整个字段的match_phrase不可用
 
而index_options=docs期间写入的数据定位出来太难了,所以目前要恢复该字段的match_phrase只能重建索引或者把全量数据都更新一遍了~~

dotNetDR_ - elasticsearch 6.x

赞同来自:

查询丢失position data的segments详情可通过
GET xxx/_segments?verbose=true

按正则搜即可得到具体的docs数
field 'fieldName' .*positions=-1

要回复问题请先登录注册