弹性搜索映射的包含机制

oarepo-mapping-includes的Python项目详细描述


OAREPO映射包括

imageimageimageimage

这个包增加了对elasticsearch映射中包含的支持。在

示例

标题、摘要和描述是多语言字符串,看起来像

{
  en: 'English version',
  cs: 'Czech version'
}

由于elasticsearch不支持includes,因此这三个属性的映射 会相当大。使用这个库,您可以创建一个映射,例如 ^{and> ^{pr2}$

// main mapping
{
    "settings": {
        "analysis": {
            "oarepo:extends": "multilingual-v1.0.0.json#/analysis"
        }
    },
    "mappings": {
        "properties": {
            "title": {
                "type": "multilingual-v1.0.0.json#/text",
                // extra properties for title might go here and are merged in
            },
            "description": {
                "type": "multilingual-v1.0.0.json#/text"
            },
            "abstract": {
                "type": "multilingual-v1.0.0.json#/text"
            }
        }
    }
}

包含的映射可能位于invenio内部,没有外部url,托管在web服务器上 并被http://或https://引用,甚至根据需要动态生成。在

安装

pip install oarepo-mapping-includes

配置

这个库必须知道包含的映射(如果不是托管在外部服务器上)的位置。 在入口点中指定(my_repo是存储库的顶级包):

setup(# ...entry_points={"oarepo_mapping_includes":["my_repo = my_repo.mapping_includes"],"oarepo_mapping_handlers":["something_discussed_later = my_repo.mapping_handlers:dynamic"]})

包含的文件位置

oarepo_mapping_includes应该具有以下结构,与invenio中的结构相同:

my_repo
    +- mapping_includes                     <-- as defined in entrypoint 
        +- v7                               <-- ES version
            +- multilingual-v1.0.0.json     <-- this is referenced in type, oarepo:extends

支持的结构

type

检查类型是外部资源(http://,https://)还是注册的内部资源 资源。如果没有,则保持原样,否则按以下方式得到定义:

  1. 如果有任何映射处理程序映射到该类型的值,则使用它们
  2. 从内部缓存外部uri获取资源(如果存在,则不包含#部分)
  3. 如果#不是类型的一部分,则返回整个资源
  4. 如果hash后面的第一个字符是/,则假定它是一个json指针 并被应用。返回json指针的结果。如果路径 不存在
  5. 否则,将获得包含具有此值的$id属性的元素。错误 如果具有此id的元素不存在,则引发

然后,该定义与处于同一级别的任何其他元素合并,产生冲突 值被覆盖(想想python中的继承)。在

类型数组

支持多种类型。在

{
  // ...
  "title": {
    "type": [
      "multilingual-v1.0.0.json#/text",
      "copy-v1.0.0.json",
    ]
  }
}

其中copy-v1.0.0.json可能包含:

{
  "copy_to": "all_fields"
}

对于冲突,使用类似于python继承的算法

在oarepo:延伸

oarepo:extends的行为方式与type完全相同,但可以在映射中的任何地方使用

动态处理程序

有时最好是动态创建映射。例如, 支持的语言数量因安装而异,并且 支持的语言在invenio.cfg中指定

在入口点中,定义oarepo_mapping_handlers。“=”前的左手边 应该匹配typeextend。它可能是完整值或 #之前的值。在

经办人签名:

defhandler(type=None,resource=None,id=None,json_pointer=None,app=None,content=None,root=None,content_pointer=None,**kwargs):"""    :param type         the type as literally written in "type" or "extends" properties    :param resource     part of the type before '#'    :param id           part of the type after '#' if it does not start with '/'      :param json_pointer part of the type after '#' if it starts with '/'    :param app          current flask application. Use app.config to get the current config    :param content      json element containing the ``type``     :param root         the whole mapping    :param content_pointer                         json pointer of the content element    :param **kwargs     think of extensibility    """return{...}

合并和替换内容

处理程序可以返回字典或oarepo_mapping_includes.Mapping的实例。在

如果它返回字典,它将与原始映射内容合并 (如额外属性等)

如果返回Mapping(mapping=<dict>, merge=True),参数merge定义 原始映射内容将合并到(True)中或完全替换(False)。在

如果处理程序希望转换原始内容,而不是简单地合并它,那么这是可用的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在24小时和12小时之间转换   设置适配器时出现java“空对象”错误   java jmap支持堆转储的ascii格式和二进制转储格式   检索节点的子级值时发生java db4o透明激活Null异常   java在DeepLearning4j中实现DotProduct层   用于端点的java Camel处理器   返回elasticsearch java api中已分析的非存储文本字段的子字符串   java将变量传递给进程   java当web服务器上没有流量时,它能将自己设置为睡眠模式吗?   哈希集的java底层数据结构   java中的文件处理zip创建错误   jpackage应用程序的java配置文件无法解析/扩展变量   java Jackson JsonMappingException在json具有嵌套的相同节点时发生启动_数组错误   java类引用取自不同的jar