如何将搜索字符串与python中的内容进行匹配

时间:2009-07-09 12:54:23

标签: python search lucene solr

通常在我们搜索时,我们会有一个故事列表,我们提供一个搜索字符串,并期望返回给定搜索字符串与故事匹配的结果列表。

我正在寻找的是相反的。提供搜索字符串列表和一个故事,找出与该故事匹配的搜索字符串。

现在可以用re完成,但这里的情况是我想使用solr支持的复杂搜索查询。 query syntax here的完整详情。注意:我不会使用提升。

基本上我想在下面的示例代码中获得一些关于doitmatch函数的指示。

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查询转换为正则表达式:

sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python) OR "is a jerk")

6 个答案:

答案 0 :(得分:1)

经过广泛的谷歌搜索,我意识到我要做的是布尔搜索。

找到使正则表达式布尔值识别的代码:http://code.activestate.com/recipes/252526/

问题现在看来已经解决了。

答案 1 :(得分:0)

可能很慢但很容易解决方案:

对故事加上搜索引擎的每个字符串进行查询。如果它返回任何内容,则匹配。

否则您需要自己实现搜索语法。如果包括“标题:”之类的东西,那么这可能相当复杂。如果它只是你的例子中的AND和OR,那么它就是一个不太毛茸茸的递归函数。

答案 2 :(得分:0)

前段时间我找了一个lucene的python实现,我来到了Woosh,这是一个纯粹的基于python文本的研究引擎。也许它会满足您的需求。

你也可以尝试pyLucene,但我没有调查过这个。

答案 3 :(得分:0)

这是伪代码的建议。我假设您在索引中存储了包含搜索词的故事标识符,以便您可以使用搜索结果检索它。

def search_strings_matching(story_id_to_match, search_strings):
    result = set()
    for s in search_strings:
        result_story_ids = query_index(s) # query_index returns an id iterable
        if story_id_to_match in result_story_ids:
            result.add(s)
    return result 

答案 4 :(得分:0)

这对你来说可能不那么有趣了,因为你已经解决了你的问题,但是你所描述的内容听起来像Prospective Search,这就是你首先得到查询而你想要的内容。在它们出现时将它与文档相匹配。

Lucene的MemoryIndex是一个专门为此类设计的类,在您的情况下,它可能足以对单个文档运行许多查询。

但这与Python无关。你最好在java中写这样的东西。

答案 5 :(得分:0)

如果您在AppEngine上编写Python,则可以使用AppEngine预期搜索服务来实现您在此处尝试的功能。请参阅:http://code.google.com/appengine/docs/python/prospectivesearch/overview.html