我可以将 elasticsearch-dsl 的 IpRange 子类化以供 django-elasticsearch-dsl 使用吗?

Posted

技术标签:

【中文标题】我可以将 elasticsearch-dsl 的 IpRange 子类化以供 django-elasticsearch-dsl 使用吗?【英文标题】:Can I subclass elasticsearch-dsl's IpRange to be used by django-elasticsearch-dsl? 【发布时间】:2021-07-08 22:25:33 【问题描述】:

如何将 ip_range 字段类型用于带有django-elasticsearch-dsl 的 CIDR 表示的 IP 地址?

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 中,如果您对窗口进行子类化,那么您可以获得子类化窗口的句柄,除非您在操作系统分配窗口句柄之前对实例进行子类化(这只是稍微复杂一点)。例如,如果您在 FireFox 中创建一个新选项卡的子类,那么您会得到一个 pre-and-unassigned-window(我不记得它叫什么),这是一个 FireFox 选项卡,FireFox 稍后将很快将其合并到它的唯一一个窗口的句柄,那么您将在分配给该选项卡的句柄之前执行此操作。如果您在被分配到其他中断项目的句柄后遇到这种情况,那么这可能是您的问题。几年前我做了这个并让它工作,但我现在没有时间找到它并在这里发布。但是,你明白了。

然后,在你在一个简单的程序上测试了你的子类化并验证你做的正确并且你得到了正确的结果之后,然后只有在测试你在这篇文章中谈论的内容之后。

那么,如果你不能得到想要的结果,看起来 django_elasticsearch_dsl 是问题所在,你应该研究更多。

ps:如果您想知道为什么我发布但不回复 cmets:我的浏览器似乎不支持这些 Stack Overflow 页面上的“添加评论”,所以我可以发布但我不能(直到 SO 使他们的页面对我来说更向后兼容)回复或评论。而且,我昨天发现我用于此帐户的电子邮件服务器无法正常工作。

【讨论】:

以上是关于我可以将 elasticsearch-dsl 的 IpRange 子类化以供 django-elasticsearch-dsl 使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何记录或打印被调用的 python elasticsearch-dsl 查询

如何在elasticsearch-dsl(5.4.0)中使用搜索API中的索引

python对于新版本elasticsearch-dsl(7.1)的使用说明

elasticSearch-DSL

如何为 AWS Opensearch 域启用基于密码的身份验证?

Tornado AsyncHTTPClient性能下降