For nudb


Keywords
nudb
License
Other
Install
pip install nudb==1.1.4

Documentation

NUDB

A Python module for NUDB.
NUDB is a fast database and search engine.

Menu:

Install

$ pip install nudb

Usage

資料格式

  • GAIS record

    • @ 開頭, : 結尾作為欄位名稱

    • : 之後為欄位內容

    • For example:

      // "@title:" 為欄位名稱
      @title:Mayday五月天 [ 頑固Tough ] Official Music Video
  • JSON

Connect to NUDB

from nudb import Nudb

nudb = Nudb()
nudb.connect('host', 'port', 'db')

參數說明

  • host: DB host
  • port: DB port
  • db: 指定 DB 名稱

Get DB info

result = nudb.get_DB_info(timeout=10)

參數說明

  • timeout: 設定 timeout,單位為 s,預設是 10s.

Search

options = {
    'db': 'test',
    'matchmode': 'BestMatch',
    'groupby': '@title:',
    'getrec': 'y',
    'orderby': 'score',
    'order': 'decreasing',
    'minrid': 100,
    'maxrid': 10000,
    'ridrange': 10000,
    'minscore': 100,
    'maxscore': 5000,
    'q': '旅遊',
    'filter': '@viewcount:>1000',
    'Sensitivity': 'sensitive',
    'p': 1,
    'ps': 10,
    'select': '@title:,@body:,@viewcount:',
    'out': 'json'
}
result = nudb.search(options, timeout=10);

參數說明

  • timeout: 設定 timeout,單位為 s,預設是 10 s.
  • options: query options
    • db: 指定DB

    • matchmode

      • AndMatch (預設)
      • OrMatch
      • BestMatch
    • groupby: 指定欄位群組, 預設只有輸出key, count, 欄位格式為GAIS record

    • getrec=y: 搭配groupby使用, 輸出全部資料

    • orderby

      • rid: 依照rid排序

      • score: 必須有參數q 才有score

      • groupsize: 搭配groupby

      • {FieldName}: 依照欄位(FieldName)排序

        • 在建立DB時, 數值欄位須設定 -numfieldindex
        • 在建立DB時, 時間欄位須設定 -timeindex
        {
          'orderby': '@viewcount:'
        }
      • [min|max|ave|sum]{FieldName}: 找出欄位(FieldName)的最小/最大/平均/總和值

        {
          'orderby': 'sum@viewcount:' 
        }
      • order: 搭配orderby使用, 預設為decreasing

        • decreasing: 遞減
        • increasing: 遞增
      • minrid: 設定rid最小值

      • maxrid: 設定rid最大值

      • ridrange: 設定搜尋的rid範圍, rid由大至小, 僅搜尋此範圍內的資料

      • minscore: score最小值

      • maxscore: score最大值

      • q: 搜尋關鍵字

        • 可指定欄位搜尋, 欄位格式為GAIS record:
        {
          'q': '@title:日本旅遊'
        }
      • 可指定欄位值須完全符合:

        {
          'q': '@id:=abcd1234'
        }
      • 可設定所有條件須符合(AndMatch):

        {
          'q': '+@id:1234,+@name:test'
        }
        • 可搜尋多個欄位, 以","區隔:
        {
          'q': "@title:日本旅遊,@body:東京"
        }
    • time: 可設定搜尋時間範圍

      • 在建立DB時, 時間欄位須設定 -timeindex

      • 限定時間區間

        {
          'time': '=20180101-20180301'
        }
      • 特定時間以後

        {
          'time': '=>20180220122000'  # YYYYMMDDHHmmss
        }
      • 特定時間以前

        {
          'time': '=<20180220122000'  # YYYYMMDDHHmmss
        }
      • 限定某天

        {
          'time': '=20180220'
        }
    • filter: 數值條件檢索, 沒有做數值欄位索引(-numfieldindex)也可查詢

      {
        'filter': '@price:<200'
      }
      {
        'filter': '@price:200-400'  # 數值區間
      }
    • maxcandidnum

    • Sensitivity

      • sensitive: 預設, 區分大小寫
      • insensitive: 不分大小寫
    • keytermfield

    • keytermstat

    • p: page, 指定輸出page, 預設為1

    • ps: page size, 每個page大小, 預設為10

    • select: 指定輸出欄位, 欄位格式為GAIS record, 多個欄位之間以","區隔

    • L: 指定回傳起始比數及總筆數

      {
        'L': 30       # 回傳30筆
      }
      {
        'L': '11,60'  # 從第11筆開始, 輸出60筆
      }
    • out: 輸出格式 (json or text)

Get record by rid or key

result = nudb.rget(data_id, search_field='rid', timeout=10)

參數說明

  • data_id: Record ID or primary key.
  • search_field: 搜尋的欄位,rid 或 key, 預設是 rid.
  • timeout: 設定 timeout,單位為 s,預設是 10s.

Put record

# format: json or text
result = nudb.rput(data, data_type, rec_beg=None, timeout=10)

參數說明

  • data: 資料
  • data_type: 資料格式(json or text)
  • rec_beg: record begin pattern, 若資料格式為text則必須有此參數
  • timeout: 設定 timeout,單位為 s,預設是 10s.

Put record from file

result = nudb.fput(file_path, data_type, rec_beg=None, timeout=60)

參數說明

  • file_path: 要上傳的檔案
  • data_type: 資料格式(json or text)
  • rec_beg: record begin pattern, 若資料格式為text則必須有此參數
  • timeout: 設定 timeout,單位為 s,預設是 60s.

Delete record by rid or key

result = nudb.rdel(data_id, search_field='rid', timeout=10)

參數說明

  • data_id: Record ID 或 primary key, 一次刪除多筆可使用,區隔多個 id
  • search_field: 搜尋的欄位,rid 或 key, 預設是 rid.
  • timeout: 設定 timeout,單位為 s,預設是 10s.

Update record

result = nudb.rupdate(data_id, data, data_type, search_field='rid', update_method='replaceRecord', timeout=10)

參數說明

  • data_id: 要更新的資料rid or primary key
  • data: 更新的資料內容
  • data_type: 資料格式(json or text)
  • search_field: 搜尋的欄位,rid 或 key, 預設是 rid.
  • update_method: 更新方式
    • replaceRecord: 取代整筆資料 (Default)
    • replaceField: 取代指定欄位的資料
  • timeout: 設定 timeout,單位為 s,預設是 10s.

Change log