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)¶ 允许以相对较短的固定宽度索引整数或浮点数的特殊字段类型。该字段在索引前将数字转换为可排序的字节。
指定字段的数字类型(
int
或float
)当你创建NUMERIC
对象。默认值为int
. 为了int
,可以指定以位为单位的大小。(32
或64
)对于两者int
和float
您可以指定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) ...
还可以使用数字字段通过指定
int
或long
以及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 -- 可以存储在此字段中的数字类型,可以是
int
,float
. 如果你使用Decimal
使用decimal_places
argument to control how many decimal places the field will store.bits -- 什么时候?
numtype
是int
,用于存储数字的位数: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查询组合在一起。