如何从 elasticsearch 结果中排除大量 id?
How to exclude a large set of of ids from elasticsearch result?
我在 elasticsearch 中索引了很多 产品。我需要从 elasticsearch 中的查询中排除一个 ID 列表(我从 SQL 数据库中获取)。
假设 Products 存储为,
{
"id" : "1",
"name" : "shirt",
"size" : "xl"
}
我们使用 elasticsearch 根据某种算法向客户显示推荐产品列表。
如果客户将产品标记为 'Not Interested',我们不必再次向他展示该产品。
我们将此类产品与 product_id、customer_id 和 SQL table 以及状态'not_interested'。
现在,在运行时为客户获取推荐时,我们从 SQL 数据库中获取 'not_interested' 产品列表,并发送 product_id 的数组s 在 elasticsearch 的非过滤器中,将它们排除在推荐之外。
但是问题出现了,当 product_ids 数组的大小变得太大时。
我应该如何在 elasticsearch 中存储 product_id 和 customer_id 映射
仅使用 elasticsearch 在运行时过滤掉 'not_interested' 产品?
将它们存储为嵌套对象或 parent/child 文档是否有意义?或者一些完全不同的存储方式,这样我就可以有效地从结果中排除一些 ID。
您可以使用 terms query
有效地排除 ID(或任何其他文字字符串)。
Elasticsearch 和Solr 都有这个。它非常强大而且非常高效。
Elasticsearch 在 IDS query
中有此功能。该查询实际上是对 _uid 字段的术语查询。确保在 bool
查询的 mustNot
子句中使用此查询。参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html
在 Solr 中,您可以在 fq
中使用 terms query
,例如 fq=-{!terms f=id}doc334,doc125,doc777,doc321,doc253
。注意减号表示它是一个否定。参见:http://yonik.com/solr-terms-query/
添加 Terms under must_not 部分,如下所示:
{
"must_not": [
{
"terms": {
"id": [
"1",
"3",
"5"
]
}
}
]
}
使用"ids"查询:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html
{
"query": {
"ids" : {
"type" : "my_type",
"values" : ["1", "4", "100"]
}
}
}
包裹在布尔值内> must_not。
我在 elasticsearch 中索引了很多 产品。我需要从 elasticsearch 中的查询中排除一个 ID 列表(我从 SQL 数据库中获取)。 假设 Products 存储为,
{
"id" : "1",
"name" : "shirt",
"size" : "xl"
}
我们使用 elasticsearch 根据某种算法向客户显示推荐产品列表。 如果客户将产品标记为 'Not Interested',我们不必再次向他展示该产品。 我们将此类产品与 product_id、customer_id 和 SQL table 以及状态'not_interested'。
现在,在运行时为客户获取推荐时,我们从 SQL 数据库中获取 'not_interested' 产品列表,并发送 product_id 的数组s 在 elasticsearch 的非过滤器中,将它们排除在推荐之外。 但是问题出现了,当 product_ids 数组的大小变得太大时。
我应该如何在 elasticsearch 中存储 product_id 和 customer_id 映射 仅使用 elasticsearch 在运行时过滤掉 'not_interested' 产品?
将它们存储为嵌套对象或 parent/child 文档是否有意义?或者一些完全不同的存储方式,这样我就可以有效地从结果中排除一些 ID。
您可以使用 terms query
有效地排除 ID(或任何其他文字字符串)。
Elasticsearch 和Solr 都有这个。它非常强大而且非常高效。
Elasticsearch 在 IDS query
中有此功能。该查询实际上是对 _uid 字段的术语查询。确保在 bool
查询的 mustNot
子句中使用此查询。参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html
在 Solr 中,您可以在 fq
中使用 terms query
,例如 fq=-{!terms f=id}doc334,doc125,doc777,doc321,doc253
。注意减号表示它是一个否定。参见:http://yonik.com/solr-terms-query/
添加 Terms under must_not 部分,如下所示:
{
"must_not": [
{
"terms": {
"id": [
"1",
"3",
"5"
]
}
}
]
}
使用"ids"查询:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html
{
"query": {
"ids" : {
"type" : "my_type",
"values" : ["1", "4", "100"]
}
}
}
包裹在布尔值内> must_not。