【问题标题】:How to query on unanalyzed fields?如何查询未分析的字段?
【发布时间】:2016-07-14 08:42:13
【问题描述】:

我的 elasticsearch_dsl 类中有一些东西我想查询精确匹配:

class Profile(DocType):
    name = String(fields={'raw': String(index='not_analyzed')})

虽然这确实有效,但我总是需要在查询中添加 .raw 并且无法准确查询 name

# Matches "foo" and "foo-1"
Profile.search().filter('term', name='foo'})
# Matches nothing
Profile.search().filter('term', name='foo-1'})
# Matches what i want (only "foo-1")
Profile.search().filter('term', **{'name.raw': 'foo-1'})

这感觉有点不对,因为我应该可以只使用name 而不是raw,因为它应该是一样的。

什么是正确的方法?

【问题讨论】:

  • 您只需要将您的主字段索引为not_analyzed,但首选的方法是使用您现在拥有的raw 字段。
  • 我确实将它索引为not_analyzed,请参阅我附加的 DocType 类。

标签: elasticsearch elasticsearch-dsl elasticsearch-py


【解决方案1】:

不,正确的使用方法是使用name.raw,因为这是not_analyzed 的字段。如果您只使用name,则您没有使用not_analyzed 版本,您可以使用带有standard 分析器的分析版本。

这就是filter('term', name='foo'}) 匹配foofoo-1 的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多