首页 > 解决方案 > 我可以将 elasticsearch-dsl 的 IpRange 子类化以供 django-elasticsearch-dsl 使用吗?

问题描述

如何将 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"
...

标签: pythonpython-3.xdjangoelasticsearch-dslpython-class

解决方案


我还没有看过你所有的代码,但我建议你首先确定你正在正确地进行子类化(或挂钩和子类化)。逐行检查您的语法并确保您提供的内容正确。

如果您在 Microsoft Windows 系统中,您可能还会(单独)获得所有打开的窗口句柄的列表,并尝试通过其中一个句柄进行子类化,以验证您是否正确地进行子类化。

首先使用一些简单的其他程序进行测试,以验证您是否可以从子类窗口读取和拦截消息。

然后我建议你确保你可以从子类中读取或返回一个非常简单的值。在 Windows 中,如果您对窗口进行子类化,那么您可以获得子类化窗口的句柄,除非您在操作系统分配窗口句柄之前对实例进行子类化(这只是稍微复杂一点)。例如,如果您在 FireFox 中创建一个新选项卡的子类,那么您会得到一个预先和未分配的窗口(我不记得它叫什么),这是一个 FireFox 选项卡,FireFox 稍后将很快将其合并到它的唯一一个窗口的句柄,那么您将在分配给该选项卡的句柄之前执行此操作。如果您在被分配到其他中断项目的句柄后遇到这种情况,那么这可能是您的问题。几年前我做了这个并让它工作,但我现在没有时间找到它并在这里发布它。但是,你明白了。

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

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

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


推荐阅读