适用于Zope和Plone的可插拔全文索引解决方案
项目描述
TextIndexNG V3是什么?
TXNG 3是使用Zope 3技术重新实现TextIndexNG产品的Zope 2产品。当前实现可以在Zope 2上直接运行(与Five结合)。核心实现可以很容易地在Zope 3中重用。
特性
多字段索引(例如,您可以为标题、作者和正文创建一个索引来索引内容并对每个字段进行查询)
多语言支持(Products.LinguaPlone和plone.app.multilingual)
可插拔组件(存储、词典、查询解析器、分割器、停用词、规范化器)
复杂查询(AND、OR、NOT、短语搜索、右截断、通配符、相似性搜索)
索引外部格式(DOC、PDF、XML、SGML、PPT等。)
可选的查询自动扩展以改进搜索结果
要求
Zope 2.10+
要在Plone中运行TextIndexNG3,您需要Plone 3.1或更高版本
下载和项目区域
TextIndexNG 3目前在Github上托管
支持
错误和支持问题将通过Github上的TextIndexNG 3错误跟踪器免费处理
从http://www.zopyx.com/提供按小时或按问题定制的专用商业支持。
最新源代码可在Github上获取
许可证
TextIndexNG 3在Zope公共许可证V 2.1下发布(见ZPL.txt)。其他许可证协议可以达成。请联系我们了解详情(info@zopyx.com)。
TextIndexNG 3 包含了 ZCTextIndex/WidCopy.py 和 ZCTextIndex/NBest.py 的副本,这些文件在 Zope 公共许可证 ZPL 下发布。
TextIndexNG 3 随附了 Snowball 代码(snowball.tartarus.org)的副本,用于实现词干提取。此代码由 Martin Porter 博士于 2001 年创作,并在 BSD 许可证下发布。
TextIndexNG3 随附了 PLY 的修改版,(C) 2001,David M. Beazley。PLY 在 GNU 较小通用公共许可证 (LGPL) 下发布。
TextIndexNG3 随附了由 David Necas 编写的 python-levenshtein 扩展,并在此 GNU 公共许可证 (GPL) 下发布。
致谢
非常感谢 Yvo Schubbe 为 3.2.0 版本贡献了大量代码。感谢 Christian Zagrodnik 为 3.4.0 版本的工作。
贡献
成为 TextIndexNG3 核心的第三方贡献(意味着它们被检查到 TextIndexNG3 源代码库中)必须使用与源相同的许可证(ZPL 2.1)。贡献的代码可能会在未事先通知原始贡献者的情况下重新许可。
安装
使用 zc.buildout 进行安装
从 TextIndexNG3 3.3.0 开始,使用 zc.buildout 安装 TextIndexNG3 是唯一支持且推荐的方法。将以下内容添加到您的 buildout.cfg 文件中。
eggs = Products.TextIndexNG3
。
编译和安装扩展模块需要 C 编译器(通常在 Unix 系统上是 GCC,效果极佳)。在 Windows 系统上,您需要 Visual C++ 来编译扩展模块。
在 Plone 上安装
按照上述步骤操作
转到“Plone 设置” -> “添加/删除程序”
选择 TextIndexNG3 以作为新产品添加
设置屏幕(左侧)上将出现 TextIndexNG3 的新配置集
点击配置集,并选择唯一选项以用 TextIndexNG3 索引替换现有索引设置
就是这样
外部转换器
要转换 .doc、.pdf 等外格式,您需要安装一些外部转换器。有关详细信息,请参阅
。
如何使您自定义的内容类型可搜索
大多数当前的 Zope 索引实现都是基于这样一个事实:ID 为 XX 的索引尝试从对象的 XX 属性或通过调用对象的 XX() 方法查找可索引内容。尽管 TextIndexNG V3 仍然支持这种行为,但通过 TXNG3 使自定义类型可索引的推荐方法是通过提供专门的方法来返回可索引内容。这些方法的 API 定义在 src/textindexng/interfaces/indexable.py 中。自定义类型必须直接实现 IIndexableContent API 或通过 ZCML 注册的适配器提供接口。应使用 IndexContentCollector 类返回可索引内容,无论是作为 Unicode 字符串还是作为二进制流(通过外部转换器转换)。有关如何使用索引 API 的示例,请参阅 src/textindexng/tests/mock.py(请参阅 Mock、MockPDF 和 StupidMockAdapter 类)。
如何查询索引?
TextIndexNG 接受多个查询选项,这些选项会影响搜索结果(传递给 search() 方法的选项)
query - 搜索查询(见下文)。警告:搜索查询必须 始终 是 Python Unicode 字符串
parser - 已注册解析器的 ID(默认:txng.parsers.english)
language - 特定索引注册的 一种 语言(默认:第一个注册的语言)
field - 对此字段执行查询(如注册到索引中)
similarity_ratio - 介于 0.0 和 1.0 之间的浮点值,用于根据 Levenshtein 距离测量术语的相似度(默认:0.75)
autoexpand - ‘off’|’always’|’on_miss’(默认:‘off’)确定如何处理查询术语。‘on_miss’将查询术语扩展到与原始搜索术语相似的所有术语(如果找不到)。‘always’始终扩展术语。‘off’关闭自动扩展。自动扩展有助于您改进搜索结果,例如用于拼写错误。使用自动扩展可能会降低查询性能。
排名 - 0|1|True|False 开启/关闭(默认 0|False)基于余弦度量进行的相关性排名。使用‘排名’要求索引使用实现 IStorageWithTermFrequency(txng.storages.term_frequencies)的存储。默认情况下,索引 不使用 此存储(请参阅索引构造函数的‘storage’参数)。
ranking_maxhits - 从排名中获得的最大文档数(默认 50)。使用此选项必须将‘ranking’设置为 True,否则将引发异常。
解析器
TextIndexNG 附带五个查询解析器。每个解析器都实现不同的查询语法
txng.parsers.en - 实现以下所述的查询语法(这是默认查询解析器)
txng.parsers.de - 与 txng.parsers.en 相同,但使用‘UND’,‘ODER’和‘NICHT’代替‘AND’,‘OR’和‘NOT’(德语解析器)
txng.parsers.fr - 与 txng.parsers.en 相同,但使用‘ET’,‘OUT’和‘PAS’代替‘AND’,‘OR’和‘NOT’(法语解析器)
txng.parser.dumb_and - 这是一个非常简单的解析器,只接受空格分隔的术语列表,所有术语都使用 AND 组合。不允许使用与上述解析器相同的查询选项。
txng.parser.dumb_or - 这是一个非常简单的解析器,只接受空格分隔的术语列表,使用 OR 组合。不允许使用与上述解析器相同的查询选项。
词干提取
维基百科定义为
A stemmer is a program or algorithm which determines the morphological root of a given inflected (or, sometimes, derived) word form -- generally a written word form.
TextIndexNG V3 包括由 Martin Porter 编写的 Snowball 词干提取库(snowball.tartarus.org),为十一种语言提供词干提取支持。词干提取是一个可选功能,必须在创建新索引时指定。但请注意,设计上词干提取与 TextIndexNG 的许多功能不兼容。通常,除搜索没有通配符的单词、左右截断之外的所有功能都将不起作用并引发异常。
同义词词典
同义词词典将查询术语映射到一系列相关术语的序列,这些术语将用于搜索。因此,同义词词典只影响搜索但不影响索引。同义词词典配置为名为 IThesaurus 的实用工具。配置的同义词词典的名称惯例为‘txng.thesaurus.XXX’,其中 XXX 是国家代码。可以为一种语言配置多个同义词词典,名称不同。要指示 TextIndexNG3 在搜索时使用同义词词典,必须使用同义词词典的名称或同义词词典名称列表作为 search() 方法的‘thesaurus’参数。
示例
index.search(some_query, thesaurus=('txng.thesaurus.de', 'txng.thesaurus.de-special'), ..) In this case TextIndexNG will use all query terms from 'some_query' and all related terms from a lookup in the configured thesauruses *.de and *.de-special.
限制
使用同义词词典与短语搜索不兼容。短语搜索中出现的术语将永远不会用于同义词词典查找。
运行单元测试
bin/zopectl test -s Products.TextIndexNG3
txng.parsers.en 解析器的查询语法
AND 搜索: word1 AND word2
OR 搜索: word1 OR word2
PHRASE 搜索: “The Zope Book”
NOT 搜索: word1 NOT word2(搜索包含‘word1’但不包含所有文档的 -
相似度 搜索: %word(所有与‘word’相似的单词。相似度基于两个术语的 Levenshtein 距离测量。)
右截断:
在前缀末尾使用‘*’运算符以搜索以该前缀开始的单词
`foo*` matches 'foo', 'foobar', 'foofoo', etc.
左截断
在单词开头使用 * 运算符以搜索以该后缀结束的单词
*bar 匹配‘foobar’、‘bar’、‘abar’等。
通配符搜索
在术语中使用‘?’或‘*’
范围搜索: WORD1..WORD2 以搜索所有在 WORD1 和 WORD2 之间的单词(WHERE WORD1 <= word <= WORD2)(字典序排列)
组合查询(示例)
word1 and (word2 or word3)
word1 and (word2 word3) - 省略的操作符意味着 AND 搜索
word1 and “this is a phrase” 搜索短语 AND word1
(word1 或 word2) 且 (word3 或 word4)
多字段查询
使用以下符号支持在多个字段中进行搜索
`FIELDNAME::OPERATOR(term1 term2 ...)`
其中‘FIELDNAME’是索引中配置的字段ID。‘OPERATOR’可以是‘短语’、‘近’、‘且’或‘非’(或其大写形式)。‘termX’可以是单词或带有修饰符(截断、通配符搜索、相似度)的单词。
示例
title::phrase(The Zope Book)
author::and(michel pelletier amos lattmeier)
title::phrase(The Zope Book) AND author::and(michel pelletier amos lattmeier)
title::phrase(The Zope Book) OR author::and(michel pelletier amos lattmeier)
查询约束
单词是一系列不包含空白的字符序列
所有查询都必须以 Python 优尼码字符串的形式传递(不是 UTF-8 字符串)。如果查询不是优尼码,则将使用配置的默认编码将其转换为优尼码。
短语中的术语(使用短语搜索)不能包含任何特殊操作符(用于截断、相似度搜索等)……只有完整的单词
左截断、通配符搜索和相似度搜索是 昂贵的 操作,因为索引必须遍历词汇表中的所有索引单词,以过滤出匹配的单词。
联系
更改
3.4.14 (2016/02/04)
更好的 Plone 5 兼容性
3.4.13 (2016/02/03)
更好的 Plone 5 兼容性
3.4.12 (2016/02/01)
修复了 Plone 5 安装问题
3.4.11 (2015/09/09)
修复了 Plone 5 安装问题
3.4.10 (2015/29/08)
Plone 5.0 兼容性
完全不支持 CMF
3.4.9 (2014/11/23)
Plone 5.0 兼容性
3.4.8 (2014/04/21)
修复了 Plone 4.3.2 和 Plone 4.3.3 之间的单元测试失败问题
3.4.7 (2013/05/26)
针对 plone.app.multilingual 在 cmf_adapters 中的异常行为的工作区
3.4.6 (2013/05/26)
修复了关于 getSiteEncoding() 的弃用警告
3.4.4 (2011/06/15)
修复了 metadata.xml 中的版本号
3.4.4 (2011/06/15)
修复了 metadata.xml 中的版本号
3.4.3 (2011/05/31)
修复了文档问题
3.4.2 (2011/05/31)
修复了 3.4.1 版本中添加的 CMFContentAdapter 回退
改进了测试设置
3.4.1 (2010/10/30)
修复了 cmf_adapters.py 中的 plone.indexer 修复
一些 Python 2.6 兼容性修复
修复了一些弃用警告
3.4.0 (2010/07/13)
官方发布(与 3.4.0 相同)
3.4.0b1 (2010/05/20)
在添加时使排名方法可配置。
允许在查询中指定 search_all_fields。
3.3.4 (2010/01/02)
ZCTextIndex -> TextIndexNG3 索引迁移代码没有考虑到 getIndexSourceNames() 的结果
3.3.3 (2010/01/01)
修复了 Zope 2.12 兼容性
3.3.2 (2010/01/01)
修复了 Zope 2.12 兼容性
3.3.1 (2010/01/01)
修复了导入错误
3.3.0 (2009/12/30)
最终发布
3.3.0b2 (2009/12/08)
修复了用于程序创建的 splitter_casefolding 的默认值
3.3.0b1 (2009/09/24)
修复了 GenericSetup 配置的次要问题
3.3.0a2 (2009/05/02)
用 CMFDefault 的 IFile 替换了 ICMFFile
删除了 ExtensibleObjectWrapperAdapter 和相关代码
修复了 CMF 2.2 兼容性
修复了 Zope 2.12 兼容性
将代码库重构为
Products.TextIndexNG3
zopyx.txng3.core
zopyx.txng3:ext
现有索引与 V 3.3.0 不完全兼容。现有索引不能删除。然而,现有索引必须被清除并重新索引。现有索引配置不会丢失。只有内部存储和词典数据必须重建。
3.2.17
browser/document_for_words 考虑到请求/语言
3.2.16
ZMI 中的词汇表表单现在正确处理了默认语言不是‘en’的情况
3.2.15
修复了 test_index() 中的 Unicode 问题
3.2.14
修复了构造函数中的问题,导致调用 bool() 时出现 TypeError
3.2.13
在程序创建索引实例时,默认使用 index_unknown_languages=True
3.2.12
未发布
3.2.11
cmf_adapters:如果对象没有实现 Language() 方法,则回退到‘en’
3.2.10
修复了卸载代码中的问题 (#2119945)
3.2.9
修复了与 ZMI 相关的 Unicode 问题(仅影响 ZMI 测试模式)
3.2.8
添加了荷兰语同义词词典(wiggy)
更好的卸载代码(wiggy)
3.2.7
baseconverter:处理 pdata
html 转换器:处理没有隐含字符集规范的 html 文件
3.2.5
生成的解析器文件现在在每个 uid 基础上的临时目录中生成(仅限 Unix)
3.2.4
修复了卸载问题
3.2.3
在所有情况下,停用词删除器工作不正确 (#1892700)
在 txng_convert_indexes.py 中的错误修复(由 Wichert Akkerman 报告)
3.2.2
几个小错误修复
将扩展模块更新到最新的zopyx.textindexng3代码库,并添加了几个新的词干提取器。
3.2.1
改进了安装代码
修复了由于ExtensibleObjectWrapper更改导致的plone_adapters中的错误
修复了重新索引问题
3.2.0
需要Zope 2.10或更高版本
将解析器更新到PLY 2.1
Splitter:SimpleSplitter现在是默认拆分器。旧的C实现拆分器已被弃用
IndexableContentCollector:现在的实现可以处理文本和二进制内容
Plone/CMF适配器不再需要手动配置configure.zcml文件
Plone的ATFile适配器:现在可以处理文本和二进制内容
适配器代码全面重构
3.1.18
在 txng_convert_indexes.py 中的错误修复(由 Wichert Akkerman 报告)
3.1.16
修复了安装代码中的错误(未定义的'existing_ids'变量)
3.1.15
修复了与Plone 2.5.3和最新CMF版本兼容性问题(索引时_ob属性错误)
3.1.14
修复了http://sourceforge.net/tracker/index.php?func=detail&aid=1580180&group_id=50052&atid=458418
在_apply_index()中改进了参数处理
现在在Plone 2.5上卸载TextIndexNG3可以正常工作(它删除索引并重新创建原始索引设置)
3.1.13
短语搜索可能会返回假阳性(由Dieter Maurer报告)
修复了storage._doc2wid数据结构,以便更好地与ZODB协同工作(由Dieter Maurer报告)。现有的索引应该被清除并重新索引(由Dieter Maurer报告)
项目详情
Products.TextIndexNG3-3.4.14.zip的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 09ea636cb798cee0d39d9a482ca9ffa3500cb258bdc684e91ae3060e80dcaa62 |
|
MD5 | 9a3a706684fdc2570105f790c611f361 |
|
BLAKE2b-256 | da33f93aa8292c1667b2f15a0d0687d5311def5088e699001ddbe4f1eb0dc9a7 |