whoosh.sorting.
FacetType
¶“方面”的基类,可以排序/方面的方面。
categorizer
(global_searcher)¶返回A Categorizer
对应于这个方面。
参数: | global_searcher -- 父搜索者。如果需要全局文档ID引用,可以使用此搜索器。 |
---|
whoosh.sorting.
Categorizer
¶分类程序对象的基类,它根据某些条件计算文档的键值,用于排序/方面。
分类程序是由facettype对象通过 FacetType.categorizer()
方法。这个 whoosh.searching.Searcher
对象传递给 categorizer
方法可以是复合搜索器(即包装多个读取器),但始终运行分类程序。 每段, 与段相关的文档编号。
收集器将调用分类程序 set_searcher
method as it searches each segment to let the cateogorizer set up whatever segment- specific data it needs.
Collector.allow_overlap
应该是 True
如果呼叫者可以使用 keys_for
方法而不是 key_for
将文档分组为可能重叠的组。默认值为 False
.
如果分类程序子类只能使用文档编号对文档进行分类,则应设置 Collector.needs_current
到 False
(这是默认值)并且在 key_for
或 keys_for
方法,因为在这种情况下 segment_docnum
不保证与给定的匹配者一致。如果分类程序子类需要访问匹配器上的信息,则应设置 needs_current
到 True
. 这将防止调用方使用可能使匹配器处于不一致状态的优化。
key_for
(matcher, segment_docnum)¶返回当前匹配项的键。
参数: |
|
---|
key_to_name
(key)¶返回在方面中用作字典键的键的表示形式。例如,日期字段的排序键是一个大整数;此方法将其转换为 datetime
对象使分组更清晰。
keys_for
(matcher, segment_docnum)¶为当前匹配生成一系列键。
将调用此方法而不是 key_for
如果 self.allow_overlap
是 True
.
参数: |
|
---|
set_searcher
(segment_searcher, docoffset)¶当收集器移动到新段时由收集器调用。这个 segment_searcher
将是原子的。这个 docoffset
是段的文档编号相对于整个索引的偏移量。您可以使用偏移量来获取绝对索引docnum,方法是将偏移量添加到段相对docnum。
whoosh.sorting.
FieldFacet
(fieldname, reverse=False, allow_overlap=False, maptype=None)¶按字段内容排序/面。
例如,要按“路径”字段的内容的相反顺序进行排序,以及按“标记”字段的内容进行方面排序:
paths = FieldFacet("path", reverse=True)
tags = FieldFacet("tag")
results = searcher.search(myquery, sortedby=paths, groupedby=tags)
此方面根据字段类型返回不同的分类程序。
参数: |
|
---|
whoosh.sorting.
QueryFacet
(querydict, other=None, allow_overlap=False, maptype=None)¶基于一系列查询的结果排序/面。
参数: |
|
---|
whoosh.sorting.
RangeFacet
(fieldname, start, end, gap, hardend=False, maptype=None)¶基于数字范围排序/面。对于文本范围,请使用 QueryFacet
.
例如,要将“price”字段分为100美元的存储桶,最多1000美元:
prices = RangeFacet("price", 0, 1000, 100)
results = searcher.search(myquery, groupedby=prices)
范围/桶总是 inclusive 在开始和 exclusive 最后。
参数: |
|
---|
whoosh.sorting.
DateRangeFacet
(fieldname, start, end, gap, hardend=False, maptype=None)¶基于日期范围排序/面。这与RangeFacet相同,只是需要使用 daterange
对象作为范围的起点和终点,以及 timedelta
或 relativedelta
对象作为间隙,并生成 DateRange
查询而不是 TermRange
查询。
例如,要将"birthday"范围划分为5年的存储桶:
from datetime import datetime
from whoosh.support.relativedelta import relativedelta
startdate = datetime(1920, 0, 0)
enddate = datetime.now()
gap = relativedelta(years=5)
bdays = DateRangeFacet("birthday", startdate, enddate, gap)
results = searcher.search(myquery, groupedby=bdays)
范围/桶总是 inclusive 在开始和 exclusive 最后。
参数: |
|
---|
whoosh.sorting.
ScoreFacet
¶使用文档的分数作为排序标准。
For example, to sort by the tag
字段,然后在该字段内按相对分数:
tag_score = MultiFacet(["tag", ScoreFacet()])
results = searcher.search(myquery, sortedby=tag_score)
whoosh.sorting.
FunctionFacet
(fn, maptype=None)¶这个方面类型是低级的。在大多数情况下,您应该使用 TranslateFacet
相反。
这个方面类型让你传递一个任意的函数来计算键。这可能比子类化facetype和分类程序更容易设置所需的行为。
使用参数调用函数 (searcher, docid)
那里 searcher
may be a composite searcher, and the docid
is an absolute index document number (not segment-relative).
例如,要使用文档“内容”字段中的字数作为排序/分面键:
fn = lambda s, docid: s.doc_field_length(docid, "content")
lengths = FunctionFacet(fn)
whoosh.sorting.
MultiFacet
(items=None, maptype=None)¶按多个“子面”的组合对/面进行排序。
例如,按“标记”字段的值排序,然后(对于标记相同的文档)按“路径”字段的值排序:
facet = MultiFacet([FieldFacet("tag"), FieldFacet("path")])
results = searcher.search(myquery, sortedby=facet)
作为快捷方式,可以使用字符串引用字段名,它们将被假定为字段名并转换为FieldFacet对象::
facet = MultiFacet(["tag", "path"])
您也可以使用 add_*
向多方面添加条件的方法:
facet = MultiFacet()
facet.add_field("tag")
facet.add_field("path", reverse=True)
facet.add_query({"a-m": TermRange("name", "a", "m"),
"n-z": TermRange("name", "n", "z")})
whoosh.sorting.
StoredFieldFacet
(fieldname, allow_overlap=False, split_fn=None, maptype=None)¶允许您使用非索引存储字段(例如 whoosh.fields.STORED
)这通常比使用索引字段慢。
对于存储值是以空格分隔的关键字列表的字段(例如 "tag1 tag2 tag3"
)可以使用 allow_overlap
关键字参数,以允许在调用 split()
字段值的方法(如果提供了自定义拆分函数,则调用自定义拆分函数)。
参数: |
|
---|
whoosh.sorting.
Facets
(x=None)¶将面名称映射到 FacetType
对象,用于创建多组文档。
例如,按标记分组,以及 also 按价格范围分组:
facets = Facets()
facets.add_field("tag")
facets.add_facet("price", RangeFacet("price", 0, 1000, 100))
results = searcher.search(myquery, groupedby=facets)
tag_groups = results.groups("tag")
price_groups = results.groups("price")
(要按多个方面的组合进行分组,请使用 MultiFacet
)
add_facets
(facets, replace=True)¶添加给定内容 Facets
或 dict
对象。
add_field
(fieldname, **kwargs)¶添加一个 FieldFacet
对于给定的字段名(字段名自动用作方面名)。
add_query
(name, querydict, **kwargs)¶添加一个 QueryFacet
在给定条件下 name
.
参数: |
|
---|
items
()¶返回此对象中方面的(facetname,facetobject)元组列表。
names
()¶返回此对象中方面名称的迭代器。
whoosh.sorting.
FacetMap
¶包含按方面对搜索结果分组结果的对象的基类。使用对象 as_dict()
方法访问结果。
您可以将此子类传递给 maptype
创建时的关键字参数 FacetType
object to specify what information the facet should record about the group. 例如::
# Record each document in each group in its sorted order
myfacet = FieldFacet("size", maptype=OrderedList)
# Record only the count of documents in each group
myfacet = FieldFacet("size", maptype=Count)
add
(groupname, docid, sortkey)¶将文档添加到方面结果。
参数: |
|
---|
as_dict
()¶返回将组名映射到实现特定值的字典对象。例如,该值可以是文档编号列表,也可以是表示组中文档数的整数。
whoosh.sorting.
OrderedList
¶存储每个组的文档编号列表,其顺序与在搜索结果中显示的顺序相同。
这个 as_dict
方法返回将组名映射到文档编号列表的字典。
whoosh.sorting.
UnorderedList
¶以任意顺序存储每个组的文档编号列表。这比 OrderedListResult
如果您不关心组内文档的排序。
这个 as_dict
方法返回将组名映射到文档编号列表的字典。
whoosh.sorting.
Count
¶存储每个组中的文档数。
这个 as_dict
方法返回将组名映射为整数的字典。
whoosh.sorting.
Best
¶存储每个组中的“最佳”文档(即具有最高排序键的文档)。
这个 as_dict
方法返回将组名映射到文档编号的字典。