如何对确切的术语进行Sunburnt查询

时间:2012-09-21 01:16:39

标签: python solr sunburnt

尝试准确搜索" 11000060K2"

    from solr import SolrConnection
    from sunburnt import RawString

    term = "11000060K2"
    solr_conn = SolrConnection()
    scoreDocs = solr_conn.si.query(activityemail=RawString(term)).paginate(start=0, rows=1000).execute()
    params_dict = scoreDocs.params
    for key, keyvalue in params_dict:
        logging.debug ("param %s    value %s "  %(key, keyvalue) )

返回:

param start    value 0 
param q    value activityemail:11000060K2 
param rows    value 1000 

一堆与其他条款匹配的结果。

我希望它只返回与11000060K2匹配的文档以及返回/看起来像的查询:

param q    value activityemail:"11000060K2"

请告诉我我做错了什么。

1 个答案:

答案 0 :(得分:0)

如何实现这一点取决于您的Solr架构配置(schema.xml),特别是与您的activityemail字段关联的字段类型。目前,如果您收到多个结果,可能是因为给定字段类型的过滤器/分析器导致多个匹配。 Solr的solr.StrField字段类听起来像是你的字段的最佳选择,因为这种字段的值将逐字存储,查询将完全匹配。

如果您已将其他字段用于其他目的,则可以考虑为此目的创建一个新字段。

因此,在schema.xml中包含此内容会引入名为string的字段类型:

<fieldType name="string" class="solr.StrField" sortMissingLast="true" />

如果您已按照Solr默认安装中包含的示例进行操作,那么您可能已经有了这样的字段类型。您的字段定义应如下所示:

<field name="activityemail" type="string" ... />

其中省略号表示与该字段关联的各种其他选项。

重新启动Solr并重新索引文档后,只需使用您提到的字符串查询此字段:​​

from solr import SolrConnection
term = "11000060K2"
solr_conn = SolrConnection()
scoreDocs = solr_conn.si.query(activityemail=term).execute()
print scoreDocs.result.docs