【问题标题】:Searching only specific fields with elasticsearch使用 elasticsearch 仅搜索特定字段
【发布时间】:2013-03-25 18:43:52
【问题描述】:

如何告诉 Elasticsearch 在按字词搜索时排除字段?

我有一个用户索引(姓名、电子邮件、证书、经验、办公室...),但只有某些人可以通过证书搜索用户。在我当前的 PHP Lucene 实现中,我有 2 个单独的索引,其中包含和不包含该数据。有没有办法只用一个用户索引来做到这一点?我假设我需要应用某种过滤器[1][2],但没有看到可以让我完全忽略某个字段的过滤器。

如果有任何具体的方法可以使用 Elastica (PHP Client) 来实现这一点,那将会更有帮助,但原生 ES 也同样有帮助。

假设我的索引中有 2 个用户

凯文·史密斯 松饼制作认证

马克·史密斯 获得摩托车跳跃认证。

当普通用户搜索motorcycle时,不应该返回任何内容,但如果他们搜索Smith,则两者都应该返回。

具有搜索认证字段能力的用户在搜索摩托车时将返回 Mark,如果搜索 Smith,则两者都返回。

【问题讨论】:

  • 您可以控制要查询的字段和返回的字段。忽略一个字段是什么意思?你能详细说明一下吗?
  • 对不起,用户搜索索引有大约 10 个字段,所以我希望能够忽略或排除一个字段,同时仍然搜索其他字段。我唯一的选择是列出我想要搜索的〜9个字段而不是搜索一个吗?
  • 这更清楚,如果我是你,我会尝试澄清这个问题。你在做什么类型的查询?

标签: elasticsearch elastica


【解决方案1】:

我没有测试过任何东西,但您似乎可以在映射阶段将“include_in_all”设置为 false。这意味着您的字段不会包含在“_all”中。然后你只需要对“_all”字段进行查询。 注意,该字段仍然可以搜索和索引,您可以通过在字段查询中指定它来进行查询;它只是从“_all”参数中排除。

我还没有测试任何东西。

【讨论】:

    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多