Фильтровать документ по элементам в массиве ElasticSearch

заменить метод строковых объектов не принимает регулярные выражения, а только фиксированные строки (см. документацию: http://docs.python.org/2/library/stdtypes.html#str.replace ) .

Вы должны использовать модуль re:

import re
newline= re.sub("<\/?\[[0-9]+>", "", line)

0
задан Edie W. 27 March 2019 в 19:00
поделиться

1 ответ

Поскольку вы храните идентификаторы сообществ, убедитесь, что идентификаторы не проанализированы. Для этого communities должно быть типа keyword. Во-вторых, вы хотите сохранить массив идентификаторов сообществ, поскольку пользователь может принадлежать нескольким сообществам. Для этого вам не нужно делать его типа nested. Вложенный имеет все вместе разные варианты использования. Для хранения значений в виде массива необходимо убедиться, что при индексации вы всегда передаете значения в поле как массив, даже если это одно значение.

Вам нужно изменить отображение и способ индексации значений по полю communities.

1. Обновите отображение, как показано ниже:
PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "amazonId": {
          "type": "text"
        },
        "title": {
          "type": "text"
        },
        "subtitle": {
          "type": "text"
        },
        "description": {
          "type": "text"
        },
        "createdAt": {
          "type": "date"
        },
        "updatedAt": {
          "type": "date"
        },
        "published": {
          "type": "boolean"
        },
        "communities": {
          "type": "keyword"
        }
      }
    }
  }
}
2. Добавление документа в указатель:
PUT my_index/_doc/1
{
  "title": "The One True Document",
  "communities": [
    "edd05cd0-0a49-4676-86f4-2db913235371",
    "672916cf-ee32-4bed-a60f-9a7c08dba04b"
  ]
}
3. Фильтрация по идентификатору сообщества:
GET my_index/_doc/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "communities": "672916cf-ee32-4bed-a60f-9a7c08dba04b"
          }
        }
      ]
    }
  }
}

Подход Nested Field

1. Картирование:
PUT my_index_2
{
  "mappings": {
    "_doc": {
      "properties": {
        "amazonId": {
          "type": "text"
        },
        "title": {
          "type": "text"
        },
        "subtitle": {
          "type": "text"
        },
        "description": {
          "type": "text"
        },
        "createdAt": {
          "type": "date"
        },
        "updatedAt": {
          "type": "date"
        },
        "published": {
          "type": "boolean"
        },
        "communities": {
          "type": "nested"
        }
      }
    }
  }
}
2. Индексный документ:
PUT my_index_2/_doc/1
{
  "title": "The One True Document",
  "communities": [
    {
      "id": "edd05cd0-0a49-4676-86f4-2db913235371"
    },
    {
      "id": "672916cf-ee32-4bed-a60f-9a7c08dba04b"
    }
  ]
}
3. Запрос (используется для вложенного запроса):
GET my_index_2/_doc/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "communities",
            "query": {
              "term": {
                "communities.id.keyword": "672916cf-ee32-4bed-a60f-9a7c08dba04b"
              }
            }
          }
        }
      ]
    }
  }
}

Вы можете заметить, что я использовал communities.id.keyword, а не communities.id. Чтобы понять причину этого, пройдите это .

0
ответ дан Nishant Saini 27 March 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: