elasti c настройка предпочтений поиска Пользовательское значение (Java api) - PullRequest
0 голосов
/ 23 апреля 2020

Мне действительно нужны некоторые подсказки по elasti c использование поиска в java api ...

Давайте предположим, что я использую java api от ES. До сих пор я понимаю, что поиск elasti c может дать противоречивый результат из-за проблемы непоследовательности первичной копии и реплики (удаление do c приводит к общей разнице в статистике из-за удаления метки вместо ее удаления).

Итак, что я пробовал

searchRequest.preference ("_ primary_first"). Это дало мне непротиворечивый результат (поскольку он использует только первичный осколок!)

Теперь я хочу попробовать в своем игрушечном примере:

1), используя preference = Custom (string) value 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 friendly)

Q3) Есть ли какой-нибудь умный способ указать использование 1-го узла? (или определенный Node Id ??) с заданным текстом запроса? (вместо этого используются вещи hashmap ...) Например,

допустим, я не знаю, какой текст запроса я получу, но хочу равномерно распределить их по каждому узлу (среди 5!)

Но хочу придерживаться первого варианта.

если я увижу самый первый текст запроса == "красный", и я назначаю этот queryRequest для использования Node1, затем позже я также хочу использовать Node1, если я снова вижу текст запроса == "красный" .. У кого-то есть идея?

Спасибо вам, ребята!

Отказ от ответственности: Я парень не из CS и независимый ученик, который пытался экспериментировать с новыми вещами, чтобы нарушить мои зоны комфорта! :) Пожалуйста, извините за этот глупый вопрос!

1 Ответ

0 голосов
/ 24 апреля 2020

На самом деле это не глупый вопрос, и ответ состоит из двух частей.

Вы упоминаете узлы и хотите контролировать, какой узел получает какие запросы на основе атрибута.

Некоторый контекст:

  • Кластер эластичного поиска имеет узлы эластичного поиска
  • Ваши документы будут "сохранены" в индексе эластичного поиска, и выполненные вами запросы будут против этого index
  • Индекс эластичного поиска - это всего лишь абстракция, слой, который скрывает сложность осколков (в основном индексы люцены).

Теперь, когда вы сохраняете документ, этот документ в конечном итоге будет сохранен в осколке (есть сегменты и т. Д. c, но нет никаких оснований для go дальше). Теперь вы можете иметь основные осколки и осколки реплики Когда вы что-то сохраняете, это будет go в основной осколок и будет реплицироваться эластичным поиском в осколки реплики (если есть). Ваши поиски могут и будут обслуживаться как первичными, так и повторными осколками.

Теперь вы хотите контролировать, какой узел что получает. То, что вы можете контролировать, это то, что осколок получает через маршрутизацию при сохранении и через маршрутизацию при поиске .

Вы попросили контролировать, какой узел получает и что. В большинстве случаев вам это не понадобится. То, что вы можете контролировать, - это то, что получает осколок, поэтому вам нужно контролировать, какой узел получает какой осколок. Это может быть достигнуто с помощью осведомленности о распределении осколков .

Обе эти темы являются расширенными функциями, и вам нужно обязательно знать, что вы делаете, когда пытаетесь их использовать, иначе вы получите очень неожиданные результаты.

...