通常,当我们搜索时,我们有一个故事列表,我们提供一个搜索字符串,并期望返回一个给定搜索字符串与故事匹配的结果列表。在
我想做的恰恰相反。给出一个搜索字符串和一个故事的列表,找出哪个搜索字符串与该故事匹配。在
现在这可以用re来完成,但是这里的情况是我想使用solr支持的复杂搜索查询。query syntax here的完整详细信息。注意:我不会使用boost。在
基本上,我想在下面的示例代码中为doesitmatch函数获取一些指针。在
def doesitmatch(contents, searchstring):
"""
returns result of searching contents for searchstring (True or False)
"""
???????
???????
story = "big chunk of story 200 to 1000 words long"
searchstrings = ['sajal' , 'sajal AND "is a jerk"' , 'sajal kayan' , 'sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python))' , 'bangkok']
matches = [[searchstr] for searchstr in searchstrings if doesitmatch(story, searchstr) ]
编辑:此外,还想知道是否存在将如下lucene查询转换为正则表达式的模块:
^{pr2}$
可能很慢,但很容易解决:
对故事加上每个字符串对搜索引擎进行查询。如果它返回任何内容,则匹配。在
否则,您需要自己实现搜索语法。如果其中包括“标题”之类的内容,这可能会相当复杂。如果您的示例中只有AND和OR,那么它是一个递归函数,它并不复杂。在
不久前,我在寻找lucene的python实现,偶然发现了一个纯粹基于python文本的研究引擎Woosh。也许它能满足你的需要。在
你也可以试试pyLucene,但我没有调查这个。在
经过大量的谷歌搜索,我意识到我要做的是布尔搜索。在
找到了使regex布尔可识别的代码:http://code.activestate.com/recipes/252526/
这个问题现在看来已经解决了。在
相关问题 更多 >
编程相关推荐