Могу ли я подкласс IpRange elasticsearch-dsl для использования django-elasticsearch-dsl?

#python #python-3.x #django #elasticsearch-dsl #python-class

Вопрос:

Как можно использовать тип поля ip_range для IP-адресов, помеченных CIDR, с помощью django-elasticsearch-dsl?

https://www.elastic.co/guide/en/elasticsearch/reference/current/range.html#ip-range

Я попытался создать подкласс, но это приводит к отображению поля «тип»: «текст».

 ...
from django_elasticsearch_dsl.fields import DEDField
from elasticsearch_dsl.field import IpRange
...

class IpRangeField(DEDField, IpRange):
    """Subclass based on DedField and IpRange."""


@registry.register_document
class FeedDataDocument(Document):
    """FeedData elasticsearch."""
    ...
    ipaddress = IpRangeField()
    ...
 

Результаты в:

 "mappings": {
  "_doc": {
    "properties": {
      "ipaddress": {
        "type": "text"
...
 

Ответ №1:

Я не видел весь ваш код, но я предлагаю вам сначала убедиться, что вы правильно создаете подклассы (или подключаете и подклассы). Строка за строкой проверьте свой синтаксис и убедитесь, что вы правильно его используете.

Если вы находитесь в системе Microsoft Windows, вы можете (отдельно) также получить список всех открытых дескрипторов Windows и попробовать создать подклассы с помощью одного из этих дескрипторов, чтобы убедиться, что вы правильно создаете подклассы.

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

Тогда я бы посоветовал вам убедиться, что вы можете прочитать или вернуть из того, что относится к подклассу, очень простое значение. В Windows, если вы подклассируете окно, вы можете получить дескриптор для этого окна, которое вы подклассировали, если только вы не создаете подкласс экземпляра до того, как дескриптор окна был назначен операционной системой (что только немного сложнее). Например, если вы создаете подкласс новой вкладки в FireFox, то вы получаете предварительно и неназначенное окно (я не помню, как оно называется), которое должно быть вкладкой FireFox, которую FireFox быстро включит позже в дескриптор своего одного и только одного окна, тогда вы сделаете это до того, как на эту вкладку будет назначен дескриптор. Если у вас есть такая ситуация, в которой вы находитесь после назначения дескриптора с другими прерывающими элементами, то это может быть вашей проблемой. Я сделал это много лет назад и заставил его работать, но сейчас у меня нет времени найти его и опубликовать здесь. Но, вы поняли идею.

Затем, после того, как вы протестировали свой подкласс в простой программе и убедились, что вы делаете это правильно и что вы правильно получаете результаты, тогда и только тогда после этого проверьте то, о чем вы говорите в этом посте.

Затем, если вы не можете получить желаемые результаты, похоже, что проблема заключается в django_elasticsearch_dsl, и вам следует изучить это подробнее.

ps: В случае, если вам интересно, почему я публикую, но не отвечаю на комментарии: Мой браузер, похоже, не поддерживает «добавить комментарий» на этих страницах переполнения стека, поэтому я могу публиковать, но не могу (пока это не сделает их страницы более совместимыми с обратной связью, достаточными для меня) отвечать или комментировать помимо этого. И вчера я узнал, что сервер электронной почты, который я использовал для этой учетной записи, не работает.