可以根据Elasticsearch中的条件获取字段名称吗?

时间:2019-08-10 23:56:16

标签: elasticsearch

我发现GetMapping API可以为我提供ES中的所有字段名(即键),但是它没有一种按条件过滤结果的方法。有没有办法说出我所有的字段名,其中customerID = foo123?


上下文:我正在制作一个搜索用户界面,该界面仅支持基于字段的搜索(不支持全文本),用户可以使用“过滤器”(请参见下面的模拟用户界面)来查找内容他们正在寻找。

目标我要填充“字段名称”下拉列表。通过调用GetMapping可以很直接地做到这一点,但是我不能对此附加条件。我的ES集群是多租户,在我的搜索用户界面中,我只想为使用它的客户显示字段名称。

用户界面的外观:运行下面的代码片段,以查看为帮助您可视化而制作的模拟

Field-name:
<select>
  <option>appName</option>
  <option>rules.myRule.fired</option>
  <option>rules.notMyRule.fired</option>
</select>

Operator:
<select>
  <option>=</option>
  <option>!=</option>
</select>

Value: <input type="text" value="true" width=1/>
<br/> Field-name:
<select>
  <option>appName</option>
  <option>rules.myRule.fired</option>
  <option>rules.notMyRule.fired</option>
</select>

Operator:
<select>
  <option>=</option>
  <option>!=</option>
</select>
Value: <input type="text" value="true" width=1/>
<br/>(+) Add more filters<br/>
<button>Search</button>

1 个答案:

答案 0 :(得分:0)

最简单的方法是将客户分为不同的索引。如果每个客户的数据和字段不同,这也很好。如果每个客户都有自己的索引,则可以直接使用GET Mapping API获取客户的字段,而无需其他过滤器。

第二种选择是保留每个客户的记录(有状态)-它正在发送哪个字段。可以在ES索引或任何其他数据库/缓存上完成此操作。

第三个选择是使用搜索API为特定客户ID带来X个文档,然后遍历所有这些文档并收集其中的字段名称-这可能不是完整列表,因为您只检查X文档,但是如果X足够大并且文档重复其结构,则可能就足够了。