Python 如何使用斯芬克斯建筑摘录
所以,我设置了一个Sphinx配置文件。我有一个非常简单的模式,有两个字段,title和body,其中title是小说的名称,body是完整的小说本身。为了简单起见,我只增加了一本小说。索引器工作得很好,pythonapi使查询sphinxd变得轻而易举。到目前为止,我印象非常深刻,这似乎是我迄今为止研究过的最容易设置全文搜索引擎的方法(比Lucene或Solr容易得多,比Woosh快得多) 我跳过了任何数据库后端。我的小说是纯.txt格式的,我已经添加了 使用这个简单xml的示例(通过xmlpipe) 我最终想要的是这样的:Python 如何使用斯芬克斯建筑摘录,python,full-text-search,sphinx,Python,Full Text Search,Sphinx,所以,我设置了一个Sphinx配置文件。我有一个非常简单的模式,有两个字段,title和body,其中title是小说的名称,body是完整的小说本身。为了简单起见,我只增加了一本小说。索引器工作得很好,pythonapi使查询sphinxd变得轻而易举。到目前为止,我印象非常深刻,这似乎是我迄今为止研究过的最容易设置全文搜索引擎的方法(比Lucene或Solr容易得多,比Woosh快得多) 我跳过了任何数据库后端。我的小说是纯.txt格式的,我已经添加了 使用这个简单xml的示例(通过xmlp
[
{
'title': 'Dan Simmons - I Canti di Hyperion 3 - Endymion',
'body': 'il vecchio mostrò quel suo sorriso a becco di tartaruga. — non bisogna dimenticare il palazzo dello shrike, né il nostro vecchio amico shrike, giusto? non ce ne sono altre?'
},
{
'title': 'Dan Simmons - I Canti di Hyperion 3 - Endymion',
'body': '— vieni più vicino, raul endymion. — la voce pareva il rumore di una lama spuntata che sfregasse su pergamena. le labbra si muovevano come il becco d\'una tartaruga.'
},
{
'title': 'Dan Simmons - I Canti di Hyperion 3 - Endymion',
'body': 'il becco di tartaruga ebbe una contrazione, la grossa testa si mosse in un cenno d\'assenso. notai ora che il viso del vecchio, malgrado i danni provocati dai secoli, aveva ancora tratti netti e spigolosi... un\'aria da satiro.'
},
]
我的意思是,摘录的书中出现的一系列事件以及上下文中的单词(我选择了量刑,但匹配前后的n个单词都可以)。我想我必须使用构建摘录,但是如何使用呢
另外,如果我想同时匹配tartaruga(海龟)和tartarughe(海龟),我想发出一个类似
Tartarugh*
的查询。如何做到这一点是斯芬克斯?提前感谢。我对我的一个项目也做了同样的事情。我的建议是,将整本书作为单个字段加载并不是一个好主意,除非您只使用一本书,而不是多本书。我是这样做的
书籍(可以调用字段、id、姓名、作者)
页面(字段将是id、book\u id、page\u text)
Sphinx将返回一个页面id,然后使用一个简单的查询从MySQL获取页面
从id=$idreturnedbysphinx的页面中选择页面文本代码>
然后将返回的文本发送到文本摘录器/文本高亮显示器
Sphinx可以搜索精确的单词或词干单词(以及更多),但您需要在Sphinx.conf文件中进行设置
您至少需要两个索引定义:
indexer indexname1
{
#source database connection and sql query
source = src1
path = /var/data/indexname1
[... other settings ...]
#make sure stemming is switched off
morphology = none
}
#child index inherits the above, and add stemming
index indexname1stemmed : indexname1
{
path = /var/data/indexname1stemmed
morphology = stem_en
index_exact_words = 1
}
然后还需要在sphinx搜索中指定要使用的匹配模式。我不知道python语法,但sphinx手册比我能做的更好:
您可以在没有SQL数据库的情况下完成所有这些,并将其保存在文本文件中,但我可能会选择每页一个文本文件作为更易于管理的工作方式,否则您将返回整个电子书作为搜索结果。我知道PHP API有BuildExceprts来完成这项工作,您可以在这里找到一个示例:我不确定python API是否具有相同的EHMMM,这是否意味着如果我有100本不同书籍中的100个匹配项,我必须在内存中加载100本小说?是的。您需要加载文本,然后将其发送到sphinx以生成摘录。
[
{
'title': 'Dan Simmons - I Canti di Hyperion 3 - Endymion',
'body': 'il vecchio mostrò quel suo sorriso a becco di tartaruga. — non bisogna dimenticare il palazzo dello shrike, né il nostro vecchio amico shrike, giusto? non ce ne sono altre?'
},
{
'title': 'Dan Simmons - I Canti di Hyperion 3 - Endymion',
'body': '— vieni più vicino, raul endymion. — la voce pareva il rumore di una lama spuntata che sfregasse su pergamena. le labbra si muovevano come il becco d\'una tartaruga.'
},
{
'title': 'Dan Simmons - I Canti di Hyperion 3 - Endymion',
'body': 'il becco di tartaruga ebbe una contrazione, la grossa testa si mosse in un cenno d\'assenso. notai ora che il viso del vecchio, malgrado i danni provocati dai secoli, aveva ancora tratti netti e spigolosi... un\'aria da satiro.'
},
]
indexer indexname1
{
#source database connection and sql query
source = src1
path = /var/data/indexname1
[... other settings ...]
#make sure stemming is switched off
morphology = none
}
#child index inherits the above, and add stemming
index indexname1stemmed : indexname1
{
path = /var/data/indexname1stemmed
morphology = stem_en
index_exact_words = 1
}