Elasticsearch索引为何不存在带分词器的data.user_text.word_tokenized字段?
问题原因与解决办法
核心问题
data.user_text.word_tokenized是你定义的分词子字段,Elasticsearch默认不会将这类子字段包含在查询结果的_source中,只会返回原始的data.user_text字段内容,所以直接访问它会得到空值。
解决步骤
要获取到这个分词子字段的内容,需要在搜索时显式指定要返回的字段:
1. 修改Python DSL代码
search = Search(index='texts-temp') q = Q("terms", data__urls=list_urls_text) # 显式指定要返回的字段,包含分词子字段 search = search.query(q).source(includes=['data.user_text', 'data.user_text.word_tokenized']) search = search.extra(track_total_hits=True) reply = search.execute() # 现在可以正常获取分词后的内容 [x.data.user_text.word_tokenized for x in reply]
2. 对应的JSON请求体
如果直接构造JSON请求,需要添加_source参数:
{ "query": {"terms": {"data.urls": list_urls_text}}, "track_total_hits": true, "_source": ["data.user_text", "data.user_text.word_tokenized"] }
额外检查点
- 确认你的索引是在配置好
text_analyzer之后创建的,且数据是在映射设置完成后写入的。如果是先写入数据再修改映射,旧数据不会自动生成word_tokenized的内容,需要重新索引这些数据。
内容的提问来源于stack exchange,提问作者An old man in the sea.
相关产品推荐
相关产品推荐

