- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要设计一个可以支持用户特定文档编辑的查询。下面的文档描述了一种存储此数据的方法。下面的文档包含一个根文档Description 属性。除了 Eric 和 Alex 之外,所有用户都应该搜索根文档的Description 属性。对于 Eric 和 Alex,已自定义 Description 属性,并且由其中任何一个用户执行的搜索查询应该在嵌套的 UserData 数组中搜索他们的自定义 Description 字段数据。由 Eric 或 Alex 执行的搜索查询不应搜索根文档描述字段。
对于我的用例,用户可以自定义 0 个或多个根文档属性。对于用户自定义的任何根文档属性,只应为该用户搜索该属性的自定义值。
解决这个问题的强力方法是索引每个自定义文档的单独副本。我试图避免这种情况,因为担心为用户自定义的每个文档创建多个副本会通过复制未合法复制的文档内容来不公平地加权索引。
{
"Name": "doc1",
"Description": "Base description1",
"Spec": "Base document spec",
"UserData":[
{
"EnteredBy": "Eric",
"Description": "Desc entered by Eric, abc"
},
{
"EnteredBy": "Alex",
"Description": "Desc entered by Alex, def",
"Spec": "Spec entered by Alex"
}]
}
编辑 1
下面列出了我考虑过的选项。
选项 1:我可以为每个用户创建一个单独的索引。在该索引中,我将添加用户未自定义的所有基本文档,并添加用户已自定义的每个文档。这将产生 1000 多个索引。
选项 2:我可以使用 script_score 功能并使用覆盖逻辑手动计算每个文档的分数,如上所述。据我所知,评分逻辑需要是原始的,最终可能会否定 Elasticsearch 的强大功能。
编辑2
该解决方案将需要支持最多 40 个字段和案例,其中任何一个字段已被最多 200 个用户自定义。该索引将包含 750,000 个文档。
最佳答案
如何创建稍微不同的文档结构,带有嵌套字段,并将用户添加到嵌套参数中?例如
POST /st_t2/_doc
{
"Name":"doc1",
"Description": [
{"base": "wtf"},
{"Alex": "Desc entered by Alex, aaa"}
],
"Spec": [
{"base": "Base document spec"}
]
}
然后你可以像这样创建 bool 查询:
GET st_t2/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"exists": {
"field": "Description.Eric"
}
},
{
"match": {
"Description.Eric": "wtf"
}
}
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "Description.Eric"
}
}
],
"must": [
{
"match": {
"Description.base": "wtf"
}
}
]
}
}
]
}
}
}
更新:
在实现此解决方案期间,@Eric Bowden 决定使用 nested
映射,并在嵌套字段内使用提供的 exist
和 match
。 working example
关于用户数据覆盖的 Elasticsearch 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59524627/
This question already has answers here: Using Variable for Thread group Ramp up time (3个答案) 3年前关闭。 从
我希望使用 RPyC 为硬件板提供 API 作为服务。该板一次只能满足一个用户的需求。有什么方法可以让 RPyC 强制执行一次只有一个用户可以访问吗? 最佳答案 我不确定这是否有效(或有效),但您可以
如果我想以每秒 10 个请求运行测试。如何让 Jmeter 选择每秒处理该请求数所需的最佳线程数。 我将线程数设置为与每秒请求数相同。 最佳答案 您可以使用恒定吞吐量计时器 click here你只需
我正在尝试进行查询以检查客户表并返回过去 30 天、过去 365 天和所有时间具有特定值的用户数。 所有时间的计数很简单: $stmt = $conn->prepare("SELECT count(i
我是一名优秀的程序员,十分优秀!