indexer addons: sort, cjksplitter, and so on


Keywords
zope3, z3c, rpc, server, client
License
Other
Install
pip install zapian==0.3.5dev

Documentation

zapian: schemaless python interface to Xapian

作为一个pythoner,我们有理由爱xapian...

但xappy已年久失修过于陈旧了... 喜欢elasticsearch的api,但是憎恨Luence的java架构,不愿引入新的服务进程?

那么zapian,可能是你需要的....

欢迎拍砖: http://weibo.com/panjunyong

特性

  • 为xapian提供更友好的schemaless的api
  • 支持分区索引:可单独指定分区搜索,或合并搜索

    • 历史数据存放在不同的索引分区
    • 根据数据存放区域进行分区

Schemaless API

首先需要初始化数据库:

  db = Zapian(path='/tmp/test_zapian_db')

添加一个分区:

  db.add_part('2001-02')

添加索引:

  db.add_document(part='2001-02', 
                  uid='1111', 
                  index = { '+title' : u'我们很好.doc', 
                    'searchable_text' : u'', 
                            'modified' : datetime.datetime(), 
                            'crated' : datetime.datetime()
                        },
                   data = {}
                  )

修改索引:

  db.replace_document(part, uid, doc)

删除索引:

  db.delete_document(part, uid)

搜索:

  db.search(parts, ["and",
                       { "filters":
                          "exclude":
                       },

                       [ "or",
                          {"filters":
                           "exclude": },
                          { "filters":
                            "exclude": }
                       ]
                   ]
               )

doc和索引的关系

xapian内部对数据有三种用途:term索引、排序字段、返回data;系统自动对数据类型进行处理:

  • set/list/tuple:对每个包含数据,完整匹配搜索(term索引)
  • string/unicode: 用于全文搜索(term索引)
  • datetime/int/float: 用于排序和范围比较(排序字段)
  • 如果字符串类型的字段以 + 开头,表示除了全文索引,也会用于排序

数据库的结构

数据库存放在文件夹结构:

      schema.yaml   # 库结构信息
      20120112/     # 某个分区,标准xapian数据库
      20120512/     # 另外一个分区,标准xapian数据库

其中schema.json, 由系统自动维护, 记录了2个信息:

  1. PREFIX和字段的映射:

    prefixes:{title':"NC", 'created':"LL"}

  2. attribute存放的slot位置:

    slots:{'modified':1, 'created':2}

安装使用

  1. 需要先安装xapian:http://xapian.org/download
  2. 直接在pypi上安装这个包: https://pypi.python.org/pypi/zapian