fields 模块

包含与字段相关的函数和类。

模式类

class whoosh.fields.Schema(**fields)

表示索引中字段的集合。将字段名映射到定义每个字段行为的FieldType对象。

索引的低级部分使用字段号而不是字段名来实现紧凑性。这个类有几种方法可以在字段名、字段号和字段对象本身之间进行转换。

构造函数的所有关键字参数都被视为fieldname=fieldtype对。FieldType可以是实例化的FieldType对象,也可以是FieldType子类(在这种情况下,架构将在添加它之前用默认的构造函数实例化它)。

例如::

s = Schema(content = TEXT,
           title = TEXT(stored = True),
           tags = KEYWORD(stored = True))
add(name, fieldtype, glob=False)

向此架构中添加字段。

参数
  • name -- 字段的名称。

  • fieldtype -- 实例化的fields.fieldtype对象或fieldtype子类。如果传递一个实例化的对象,模式将使用它作为该字段的字段配置。如果传递FieldType子类,架构将自动用默认的构造函数实例化它。

copy()

返回架构的浅副本。字段实例没有深度复制,因此它们在模式副本之间共享。

items()

返回此架构中字段的(“fieldname”,field_object)对列表。

names(check_names=None)

返回此架构中字段的名称列表。

参数

check_names -- (可选)字段名的序列,以检查架构是否接受它们作为(动态)字段名-可接受的名称也将出现在结果列表中。注意:也可以在check-name中使用静态字段名,这样不会在结果列表中创建重复项。不支持的名称将不在结果列表中。

scorable_names()

返回存储字段长度的字段的名称列表。

stored_names()

返回存储字段的名称列表。

class whoosh.fields.SchemaClass(**fields)

允许您使用声明性语法定义架构,类似于Django模型:

class MySchema(SchemaClass):
    path = ID
    date = DATETIME
    content = TEXT

可以使用继承在架构之间共享公共字段::

class Parent(SchemaClass):
    path = ID(stored=True)
    date = DATETIME

class Child1(Parent):
    content = TEXT(positions=False)

class Child2(Parent):
    tags = KEYWORD

此类重写 __new__ 因此,实例化子类总是会导致 Schema .

>>> class MySchema(SchemaClass):
...     title = TEXT(stored=True)
...     content = TEXT
...
>>> s = MySchema()
>>> type(s)
<class 'whoosh.fields.Schema'>

构造函数的所有关键字参数都被视为fieldname=fieldtype对。FieldType可以是实例化的FieldType对象,也可以是FieldType子类(在这种情况下,架构将在添加它之前用默认的构造函数实例化它)。

例如::

s = Schema(content = TEXT,
           title = TEXT(stored = True),
           tags = KEYWORD(stored = True))

FieldType基类

class whoosh.fields.FieldType(format, analyzer, scorable=False, stored=False, unique=False, multitoken_query='default', sortable=False, vector=None)

表示字段配置。

FieldType对象支持以下属性:

  • 格式(formats.format):发布块的存储格式。

  • analyzer(analysis.analyzer):用于将文本转换为术语的分析器。

  • scorable (boolean): whether searches against this field may be scored. 这将控制索引是否存储此字段的每个文档字段长度。

  • 存储(布尔):是否为每个文档存储此字段的内容。例如,除了索引文档标题之外,通常还希望存储标题,以便将其作为搜索结果的一部分显示。

  • 唯一(布尔值):此字段的值对于每个文档是否唯一。例如,“path”或“id”。indexwriter.update_document()将使用标记为“unique”的字段查找要更新的文档的早期版本。

  • 多任务查询是一个字符串,指示当用户查询中的一个“单词”解析为多个标记时要使用哪种查询。该字符串由查询分析器解释。默认查询分析器理解的字符串为“First”(仅使用第一个标记)、“and”(用and查询联接标记)、“or”(用or联接标记)、“phrase”(用短语查询联接标记)和“default”(使用查询分析器的默认联接类型)。

  • vector(formats.format或boolean):用于存储术语的格式

    向量。如果不是 Format 对象,任何真值都表示使用索引格式作为术语向量格式。任何flase值都意味着不存储该字段的术语向量。

基字段类型的构造函数只允许您提供自己的属性值。子类可以为您配置其中的一部分或全部。

clean()

清除字段和任何子对象中的任何缓存信息。

index(value, **kwargs)

为输入值中的每个唯一单词返回(btex、frequency、weight、encoded_value)元组的迭代器。

默认实现使用 analyzer 属性将值标记为字符串,然后使用UTF-8将其编码为字节。

parse_query(fieldname, qstring, boost=1.0)

什么时候? self_parsing() 返回true,查询分析器将调用此方法来分析基本查询文本。

parse_range(fieldname, start, end, startexcl, endexcl, boost=1.0)

什么时候? self_parsing() 返回true,查询分析器将调用此方法来分析范围查询文本。如果此方法返回none而不是query对象,解析器将返回到使用process_text()解析开始和结束术语。

process_text(qstring, mode='', **kwargs)

分析给定的字符串并返回标记文本的迭代器。

>>> field = fields.TEXT()
>>> list(field.process_text("The ides of March"))
["ides", "march"]
self_parsing()

Subclasses should override this method to return True if they want the query parser to call the field's parse_query() 方法,而不是在此字段中的文本上运行分析器。当字段需要完全控制如何解释查询时(如在数字字段类型中),这很有用。

separate_spelling()

如果字段在单独的字段中存储未删除的单词以提供拼写建议,则返回true。

sortable_terms(ixreader, fieldname)

返回给定读卡器和字段中“可排序”标记的迭代器。这些值可用于排序。默认实现只返回字段中的所有标记。

这可以被字段类型(如numeric)覆盖,其中字段中的某些值对排序无效。

spellable_words(value)

返回输入值中每个唯一单词(按排序顺序)的迭代器,适合包含在字段的单词图中。

默认行为是使用关键字参数调用字段分析器 no_morph=True 这应该使分析器跳过任何形态转换过滤器(例如词干),以保留单词的原始形式。外来字段类型可能需要重写此行为。

spelling_fieldname(fieldname)

返回用于拼写建议而不是此字段的字段的名称。

参数

fieldname -- 此字段的名称。

subfields()

返回的迭代器 (name_prefix, fieldobject) 将内容放入此字段时需要索引的字段对。默认实现只会生成 ("", self) .

supports(name)

如果基础格式支持给定的过账值类型,则返回true。

>>> field = TEXT()
>>> field.supports("positions")
True
>>> field.supports("chars")
False
to_bytes(value)

返回给定值的字节表示形式,适合写入磁盘。默认实现假定一个Unicode值,并使用UTF-8对其进行编码。

to_column_value(value)

返回适合插入此字段的“文档值”列的对象。默认实现只是调用 self.to_bytes(value) .

tokenize(value, **kwargs)

分析给定的字符串并返回令牌对象的迭代器(注意:出于性能原因,实际上相同的令牌通过不同的属性反复生成)。

预制字段类型

class whoosh.fields.ID(stored=False, unique=False, field_boost=1.0, sortable=False, analyzer=None)

配置的字段类型,将字段的整个值作为一个标记进行索引。这对于不希望标记化的数据很有用,例如文件的路径。

参数

stored -- 此字段的值是否与文档一起存储。

class whoosh.fields.IDLIST(stored=False, unique=False, expression=None, field_boost=1.0)

为包含由空格和/或标点分隔的ID的字段(或任何其他字段,使用表达式param)配置的字段类型。

参数
  • stored -- 此字段的值是否与文档一起存储。

  • unique -- 此字段的值对于每个文档是否唯一。

  • expression -- 用于提取标记的正则表达式对象。默认表达式将中断CRS、LFS、制表符、空格、逗号和分号上的标记。

class whoosh.fields.STORED

为要存储但不是索引的字段配置的字段类型。

class whoosh.fields.KEYWORD(stored=False, lowercase=False, commas=False, scorable=False, unique=False, field_boost=1.0, sortable=False, vector=None, analyzer=None)

为包含空格分隔或逗号分隔的关键字(如标记)数据的字段配置的字段类型。默认情况下,不存储位置信息(因此不允许在此字段中搜索短语),也不使该字段可评分。

参数
  • stored -- 是否将字段值与文档一起存储。

  • commas -- 是否为逗号分隔字段。如果该值为假(默认值),则将其视为一个空格分隔的字段。

  • scorable -- 此字段是否可记分。

class whoosh.fields.TEXT(analyzer=None, phrase=True, chars=False, stored=False, field_boost=1.0, multitoken_query='default', spelling=False, sortable=False, lang=None, vector=None, spelling_prefix='spell_')

为文本字段(例如文章正文)配置的字段类型。默认情况下,存储位置信息以允许短语搜索。此字段类型始终可记分。

参数
  • analyzer -- 用于索引字段内容的analysis.analyzer。有关详细信息,请参阅分析模块。如果省略此参数,则字段使用analysis.standardanalyzer。

  • phrase -- 存储位置信息是否允许词组搜索。

  • chars -- 是否存储字符范围和位置。如果这是真的,“短语”也是隐含的。

  • stored -- 是否将此字段的值与文档一起存储。由于此字段类型通常包含大量文本,因此应避免将其与文档一起存储,除非需要这样做,例如允许在搜索结果中快速摘录。

  • spelling -- 如果为真,并且字段的分析器更改了术语文本的形式(例如词干分析器),则此字段将在单独的字段中存储额外信息(使用 spelling_prefix 关键字参数)允许拼写建议使用未更改的单词形式作为拼写建议。

  • sortable -- 如果为真,则使用默认列类型使此字段可排序。如果你通过 whoosh.columns.Column 实例而不是true,字段将使用给定的列类型。

  • lang -- 自动配置 whoosh.analysis.LanguageAnalyzer 对于给定的语言。如果同时指定 analyzer .

  • vector -- 如果此值的计算结果为真,请在每个文档中存储此字段中的术语列表。如果该值是的实例 whoosh.formats.Format ,索引将使用对象存储术语向量。任何其他真实值(例如 vector=True )将使用字段的索引格式来存储术语向量。

class whoosh.fields.NUMERIC(numtype=<class 'int'>, bits=32, stored=False, unique=False, field_boost=1.0, decimal_places=0, shift_step=4, signed=True, sortable=False, default=None)

允许以相对较短的固定宽度索引整数或浮点数的特殊字段类型。该字段在索引前将数字转换为可排序的字节。

指定字段的数字类型( intfloat )当你创建 NUMERIC 对象。默认值为 int . 为了 int ,可以指定以位为单位的大小。( 3264 )对于两者 intfloat 您可以指定 signed 关键字参数(默认为 True

>>> schema = Schema(path=STORED, position=NUMERIC(int, 64, signed=False))
>>> ix = storage.create_index(schema)
>>> with ix.writer() as w:
...     w.add_document(path="/a", position=5820402204)
...

还可以使用数字字段通过指定 intlong 以及 decimal_places 关键字参数。这只需将每个数字乘以 (10 ** decimal_places) 在将其存储为整数之前。当然,这可能会丢弃十进制的prceision(通过截断,而不是舍入),并施加与 int / long 但对于某些应用来说,这些可能是可以接受的。

>>> from decimal import Decimal
>>> schema = Schema(path=STORED, position=NUMERIC(int, decimal_places=4))
>>> ix = storage.create_index(schema)
>>> with ix.writer() as w:
...     w.add_document(path="/a", position=Decimal("123.45")
...
参数
  • numtype -- 可以存储在此字段中的数字类型,可以是 intfloat . 如果你使用 Decimal 使用 decimal_places argument to control how many decimal places the field will store.

  • bits -- 什么时候? numtypeint ,用于存储数字的位数:8、16、32或64。

  • stored -- 此字段的值是否与文档一起存储。

  • unique -- 此字段的值对于每个文档是否唯一。

  • decimal_places -- 指定存储小数实例时要保存的小数位数。如果设置此值,则始终会从字段中获取十进制实例。

  • shift_steps -- 在每个分层索引级别上要移位的精度位数。值一般应为1-8。值越低,搜索速度越快,但占用的空间越大。一个值 0 意味着没有分层索引。

  • signed -- 此字段中存储的数字是否为负数。

class whoosh.fields.DATETIME(stored=False, unique=False, sortable=False)

用于为日期时间对象编制索引的特殊字段类型。该字段在索引前将日期时间对象转换为可排序文本。

由于此字段基于python的datetime模块,因此它具有该模块的所有限制,例如无法在无神论的公历中表示1年之前的日期。但是,由于此字段将日期时间存储为整数微秒,因此如果Python日期时间实现支持的话,它可以轻松地表示更广泛的日期范围。

>>> schema = Schema(path=STORED, date=DATETIME)
>>> ix = storage.create_index(schema)
>>> w = ix.writer()
>>> w.add_document(path="/a", date=datetime.now())
>>> w.commit()
参数
  • stored -- 此字段的值是否与文档一起存储。

  • unique -- 此字段的值对于每个文档是否唯一。

class whoosh.fields.BOOLEAN(stored=False, field_boost=1.0)

允许为布尔值(true和false)编制索引的特殊字段类型。该字段在索引前将布尔值转换为文本。

>>> schema = Schema(path=STORED, done=BOOLEAN)
>>> ix = storage.create_index(schema)
>>> w = ix.writer()
>>> w.add_document(path="/a", done=False)
>>> w.commit()
参数

stored -- 此字段的值是否与文档一起存储。

class whoosh.fields.NGRAM(minsize=2, maxsize=4, stored=False, field_boost=1.0, queryor=False, phrase=False, sortable=False)

将文本索引为n-grams的配置字段。例如,对于字段类型ngram(3,4),值“hello”将被索引为标记“hel”、“hell”、“ell”、“ello”、“llo”。此字段类型将整个文本剪切成n个标记,包括空格和标点符号。见 NGRAMWORDS 对于字段类型,先将文本拆分为单词,然后再将单词拆分为n-grams。

参数
  • minsize -- n克的最小长度。

  • maxsize -- n克的最大长度。

  • stored -- 是否将此字段的值与文档一起存储。由于此字段类型通常包含大量文本,因此应避免将其与文档一起存储,除非需要这样做,例如允许在搜索结果中快速摘录。

  • queryor -- 如果为真,则将n-grams与OR查询组合。默认情况下,将n-grams与and查询组合在一起。

  • phrase -- 将位置存储在n-grams上,以允许精确的短语搜索。默认值为“关闭”。

class whoosh.fields.NGRAMWORDS(minsize=2, maxsize=4, stored=False, field_boost=1.0, tokenizer=None, at=None, queryor=False, sortable=False)

配置的字段使用记号赋予器将文本剪切成单词,将单词放低后将单词剪切成n-gram。

参数
  • minsize -- n克的最小长度。

  • maxsize -- n克的最大长度。

  • stored -- 是否将此字段的值与文档一起存储。由于此字段类型通常包含大量文本,因此应避免将其与文档一起存储,除非需要这样做,例如允许在搜索结果中快速摘录。

  • tokenizer -- 一个实例 whoosh.analysis.Tokenizer 用于将文本拆分为单词。

  • at -- 如果“start”,则只从单词的开头开始取n-grams。如果“结束”,则只从结尾处取n克。Otherwise the default is to take all N-grams from each word.

  • queryor -- 如果为真,则将n-grams与OR查询组合。默认情况下,将n-grams与and查询组合在一起。

例外情况

exception whoosh.fields.FieldConfigurationError
exception whoosh.fields.UnknownFieldError