You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:36:13