我 是 redis 的 新手 , 我 创建 了 一 个 索引 , 并 试图 摄取 Zeek Logging Data , 为 多 个 字段 创建 一 个 索引 , 然后 在 该 索引 中 搜索 字段 。 在 我 的 一生 中 , 当 搜索 @orig_ip
名称 或 使用 JSON.GET 来 重试 任何 与 id.*
相关 的 字段 时 , 我 无法 获得 任何 返回 值 。
- 更新 : 我 在 更 多 的 故障 排除 后 发现 了 这 一 点 , 并 在 这里 更新 , 以 帮助 任何 其他 与 此 问题 斗争 的 人 。 * *
# # 以下 是 我 创建 索引 的 错误 代码 :
# Options for index creation
index_def = IndexDefinition(
index_type=IndexType.JSON,
prefix = ['uid:'],
score = 0.5,
score_field = 'doc_score'
)
# Schema definition
schema = (
TagField('$.orig_l2_addr', as_name='orig_mac'),
TagField('$.id.orig_h', as_name='orig_ip'), #Wrong field path
TagField('$.id.resp_h', as_name='resp_ip'), #Wrong field path
NumericField('$.orig_bytes', as_name='orig_bytes'),
NumericField('$.resp_bytes', as_name='resp_bytes'),
NumericField('$.ts', as_name='timestamp')
)
r.ft('py_conn_idx').create_index(schema, definition = index_def)
中 的 每 一 个
# # 以下 是 我 使用 上述 错误 schema
得到 的 结果 ( 没有 结果 )
第 一 次
# # 更新 : 正在 使用 schema
定义 :
因此 , 即使 Zeek
只 在 字段 名 中 使用 了 .
, 而 不是 使用 它 来 创建 对象 , 但 字段 名 中 的 .
才 是 导致 查询 失败 的 罪魁祸首 。 我 需要 访问 索引 的 字段 , 如下 所 示 :
# Schema definition
schema = (
TagField('$.orig_l2_addr', as_name='orig_mac'),
TagField('$.["id.orig_h"]', as_name='orig_ip'), #Fixed field reference
TagField('$.["id.resp_h"]', as_name='resp_ip'), #Fixed field reference
NumericField('$.orig_bytes', as_name='orig_bytes'),
NumericField('$.resp_bytes', as_name='resp_bytes'),
NumericField('$.ts', as_name='timestamp')
)
格式
使用 此 schema
重新 创建 索引 后 , 我 的 查询 得到 了 结果 :
Results for "@orig_ip:{192\.168\.210\.27}":
Document {'id': 'uid:CPvYfTI4Zb1Afp2l5',....
格式
感谢 这个 stackoverflow 问题 最终 引导 我 找到 了 麻烦 的 原因 :How to get objects value if its name contains dots? 格式
1条答案
按热度按时间11dmarpk1#
将 此 答案 放在 此处 , 以便 将 此 问题 标记 为 有 答案 。 请 参阅 上面 更新 的 问题/代码 !