【发布时间】:2020-04-24 07:11:08
【问题描述】:
我真的需要一些关于在 java api 中使用弹性搜索的帮助...
假设我使用的是 ES 的 java api。 到目前为止,我知道弹性搜索可能会由于主副本和副本的不一致问题而产生不一致的结果(由于删除标记而不是删除它,删除 doc 会导致整体统计数据不同)。
所以我试过了
searchRequest.preference("_primary_first")。 这给了我一致的结果(因为它只使用主分片!)
现在我想在我的玩具示例中尝试的是,
1) 使用偏好=自定义(字符串)值 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-preference
2) 如果我有 5 个节点,我想根据 queryText 指定我们要使用的节点。
例如,
'''
if (queryRequest.text().equals("red")) {
// use 1st node
searchRequest.preference("??????")
} else if (queryRequest.text().equals("blue")) {
// use 2nd node
searchRequest.preference("??????")
} else {
// use either 3rd~5th node <- but this is not necessary if it is really hard..
searchRequest.prefernce("???????")
}
'''
Q1) 我想我需要使用自定义设置“WISELY”来表示要使用哪个节点...... 谁能给我简单的 java.api 例子?
Q2) 这是另一个,但有什么方法可以从 searchResponse 加载每个节点的状态?(再次在 java api 中友好)
Q3) 是否有任何聪明的方法来指定使用第一个节点(或某些节点 ID ??)与给定的查询文本?(而不是使用 hashmap 的东西......) 例如,
假设我不知道我会收到哪个查询文本,但我想将它们平均分配到每个节点(在 5 个中!)
但想坚持第一选择。
如果我看到第一个查询文本 == "red" 并且我指定这个 queryRequest 使用 Node1,那么稍后如果我再次看到查询文本 == "red" 我也想使用 Node1.. 有人知道吗?
谢谢你们!
免责声明: 我是非 CS 家伙和独立学习者,我试图尝试新事物来打破我的舒适区! :) 请原谅这个愚蠢的问题!
【问题讨论】: