#python #elasticsearch
#python #эластичный поиск
Вопрос:
Мне нужно выполнить поиск по нескольким индексам вместе с его картами полей.
Например, я хочу запросить строку в
field1 with index1 field2 with index2
from elasticsearch import Elasticsearch
es = Elasticsearch([eshost])
req_string = {
"size":1000,
"query": {
"query_string": {
"query": "string to be searched",
"fields": ["field1","field2"],
}
}
}
res = es.search(index='index1,index2', body=req_string)
Возможно ли это сделать?
Если да, пожалуйста, укажите несколько ссылок. Заранее спасибо!
Ответ №1:
Вы можете использовать поле _index при запросе по нескольким индексам.
Поле _index позволяет сопоставлять по индексу, в который был проиндексирован документ. Его значение доступно в определенных запросах и агрегациях, а также при сортировке или написании сценариев
Добавление рабочего примера с индексными данными, поисковым запросом и результатом поиска.
Индексировать данные:
PUT/ index1/_doc/1
{
"name": "Hello"
}
PUT/ index2/_doc/1
{
"name": "Hello World"
}
Поисковый запрос:
{
"query": {
"bool": {
"filter": [
{
"terms": {
"_index": [
"index1",
"index2"
]
}
}
],
"must": [
{
"simple_query_string": {
"query": "hello",
"fields": [
"name",
"title"
]
}
}
]
}
}
}
Результат поиска:
"hits": [
{
"_index": "index2",
"_type": "_doc",
"_id": "1",
"_score": 0.4700036,
"_source": {
"name": "Hello World"
}
},
{
"_index": "index1",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"title": "Hello"
}
}
]
Обновленный поисковый запрос:
Приведенный ниже поисковый запрос будет искать title
только поле в index1
и name
только поле в index2
{
"query": {
"bool": {
"should": [
{
"bool": {
"filter": [
{
"terms": {
"_index": [
"index1"
]
}
}
],
"must": [
{
"query_string": {
"query": "hello",
"fields": [
"title"
]
}
}
]
}
},
{
"bool": {
"filter": [
{
"terms": {
"_index": [
"index2"
]
}
}
],
"must": [
{
"query_string": {
"query": "hello",
"fields": [
"name"
]
}
}
]
}
}
]
}
}
}
Комментарии:
1. На самом деле, если оба индекса имеют «name» и «title», будет ли он учитывать index1 с именем и index2 с заголовком??
2. @VivekAnanthan он не будет учитывать
name
fromindex2
иtitle
fromindex1
. Приведенный выше поисковый запрос просто ищет соответствующий документ в заданных индексах. Но если вам нужен такой вариант использования, когда индекс должен быть сопоставлен с определенным полем, тогда вы можете просмотреть мой обновленный запрос (используя несколько предложений bool)3. @VivekAnanthan у вас была возможность просмотреть мой ответ, с нетерпением жду обратной связи от вас 🙂