Elasticsearch:具有过滤条件的查询是否会受到不在过滤条件中的记录的相关性的影响?

菲尔·赖特

想象一下,我有三组数据(SetA,SetB,SetC)和三个客户。我的第一个客户可以访问SetA和SetB,第二个客户可以访问SetA和SetC,第三个客户可以使用SetB和SetC。我可以为每个客户创建一个Elasticsearch索引,因此每个索引将具有以下数据集...

索引1索引2索引3 
------ ------ ------ 
SetA SetA SetB 
SetB SetC SetC

然后,我根据客户查询正确的索引。这很简单,但确实涉及数据的重复。

取而代之的是,我可以创建包含所有三组数据的单个索引。

索引
----- 
SetA 
SetB 
SetC

然后,我将在查询中添加过滤,以便只考虑来自正确集合的记录作为结果。这会起作用,但是我担心这个单索引解决方案不会为查询提供与多索引方法相同的结果。

我认为,但很高兴能够纠正错误的情况,当涉及内部评分(例如相关性和频率)时,索引将考虑到索引中的所有记录。因此,带有过滤的单索引将不会获得与多索引方法相同的结果。这个假设正确吗?

Elasticsearch忍者

如果您首先是根据客户ID过滤结果,然后仅进行搜索,则不会对相关性造成影响,您可以并且应该将这些数据合并到Elasticsearch中,而不是为此目的创建3个不同的索引。

您可以阅读有关查询和过滤条件t及其对分数的影响的更多信息

让我通过一个小例子向您展示:

索引定义

{
    "mappings": {
        "properties": {
            "setA": {
                "type": "text"
            },
            "setB": {
                "type": "text"
            },
            "setC": {
                "type": "text"
            },
            "customer-id": {
                "type": "long"
            }
        }
    }
}

为每个客户索引两个样本文档

{
    "setA" : "first customer",
    "setB" : "first customer",
    "setC" : "",
    "customer-id" : 1
}

{
    "setA" : "first customer set A",
    "setB" : "first customer set B",
    "setC" : "",
    "customer-id" : 1
}

{
    "setA" : "second customer",
    "setC" : "second customer",
    "customer-id" : 2
}

{
    "setA" : "second customer set A",
    "setC" : "second customer set C",
    "customer-id" : 2
}
{
    "setB" : "third customer",
    "setC" : "third customer",
    "customer-id" : 3
}

{
    "setB" : "third customer set A",
    "setC" : "third customer set C",
    "customer-id" : 3
}

首先过滤第一个客户,然后搜索相关性分数来搜索查询

{
    "query": {
        "bool": {
            "must": [ --> this would match and order according to relevance score
                {
                    "match": {
                        "setA": "first"
                    }
                }
            ],
            "filter": [ --> this is used for filtering all docs for cust-1
                {
                    "term": {
                        "customer-id": 1
                    }
                }
            ]
        }
    }
}

搜索结果

 "hits": [
            {
                "_index": "so_query_filter",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.8025915, --> relevance is high
                "_source": {
                    "setA": "first customer",
                    "setB": "first customer",
                    "setC": "",
                    "customer-id": 1 --> only cust-1 doc
                }
            },
            {
                "_index": "so_query_filter",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.60996956, -> relavance is low as more words than first
                "_source": {
                    "setA": "first customer set A",
                    "setB": "first customer set B",
                    "setC": "",
                    "customer-id": 1 --> only cust-1 doc
                }
            }
        ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有过滤条件的SQL Join查询:性能

来自分类Dev

在Entity Framework中加载具有过滤条件的子对象记录

来自分类Dev

Elasticsearch 中的条件过滤

来自分类Dev

在Elasticsearch中,如何基于不影响实际查询命中的条件过滤特定内部对象

来自分类Dev

如何在Django中编写查询以连接三个具有过滤器和按条件排序的表

来自分类Dev

Angular Typescript过滤器具有相关性

来自分类Dev

Sitecore 7 ContentSearch API在过滤器中具有数字POCO属性/条件不起作用

来自分类Dev

仅包含具有特定过滤条件的相关ICollection中的那些

来自分类Dev

Yii CGridView,显示具有过滤功能的相关模型中的多个列

来自分类Dev

在Oracle DBMS的多个列上联接具有过滤条件的表

来自分类Dev

查找具有过滤条件的任务类型(任务计数,错误计数)的计数,

来自分类Dev

在Oracle DBMS的多个列上联接具有过滤条件的表

来自分类Dev

elasticsearch-具有多个条件的术语过滤器

来自分类Dev

具有过滤器匹配的Elasticsearch聚合

来自分类Dev

elasticsearch查询中字段的不同相关性

来自分类Dev

Elasticsearch查询中的条件和范围过滤器

来自分类Dev

带有过滤条件的data.table group by

来自分类Dev

带有过滤条件的data.table group by

来自分类Dev

具有过滤功能的HTTP PUT是否仍然幂等?

来自分类Dev

具有过滤器的C#中的MongoDB Linq查询

来自分类Dev

动态生成具有过滤器的代码,具有ColumnRenamed和合并条件Scala Spark

来自分类Dev

在过滤器中具有大(?)IN列表的Postgresql 10查询

来自分类Dev

当JQGRID中存在过滤条件时,禁用拖放

来自分类Dev

在prestashop 1.6中具有过滤天数的休眠用户

来自分类Dev

如何使SparkR中的日期具有过滤功能

来自分类Dev

在prestashop 1.6中具有过滤天数的休眠用户

来自分类Dev

Elasticsearch匹配与过滤条件

来自分类Dev

使用ElasticSearch可以根据相关性过滤出结果吗?

来自分类Dev

在R中生成具有一定相关性和特定条件的两个序列

Related 相关文章

  1. 1

    具有过滤条件的SQL Join查询:性能

  2. 2

    在Entity Framework中加载具有过滤条件的子对象记录

  3. 3

    Elasticsearch 中的条件过滤

  4. 4

    在Elasticsearch中,如何基于不影响实际查询命中的条件过滤特定内部对象

  5. 5

    如何在Django中编写查询以连接三个具有过滤器和按条件排序的表

  6. 6

    Angular Typescript过滤器具有相关性

  7. 7

    Sitecore 7 ContentSearch API在过滤器中具有数字POCO属性/条件不起作用

  8. 8

    仅包含具有特定过滤条件的相关ICollection中的那些

  9. 9

    Yii CGridView,显示具有过滤功能的相关模型中的多个列

  10. 10

    在Oracle DBMS的多个列上联接具有过滤条件的表

  11. 11

    查找具有过滤条件的任务类型(任务计数,错误计数)的计数,

  12. 12

    在Oracle DBMS的多个列上联接具有过滤条件的表

  13. 13

    elasticsearch-具有多个条件的术语过滤器

  14. 14

    具有过滤器匹配的Elasticsearch聚合

  15. 15

    elasticsearch查询中字段的不同相关性

  16. 16

    Elasticsearch查询中的条件和范围过滤器

  17. 17

    带有过滤条件的data.table group by

  18. 18

    带有过滤条件的data.table group by

  19. 19

    具有过滤功能的HTTP PUT是否仍然幂等?

  20. 20

    具有过滤器的C#中的MongoDB Linq查询

  21. 21

    动态生成具有过滤器的代码,具有ColumnRenamed和合并条件Scala Spark

  22. 22

    在过滤器中具有大(?)IN列表的Postgresql 10查询

  23. 23

    当JQGRID中存在过滤条件时,禁用拖放

  24. 24

    在prestashop 1.6中具有过滤天数的休眠用户

  25. 25

    如何使SparkR中的日期具有过滤功能

  26. 26

    在prestashop 1.6中具有过滤天数的休眠用户

  27. 27

    Elasticsearch匹配与过滤条件

  28. 28

    使用ElasticSearch可以根据相关性过滤出结果吗?

  29. 29

    在R中生成具有一定相关性和特定条件的两个序列

热门标签

归档