0

试图准确搜索“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"

请告诉我我做错了什么。

4

1 回答 1

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
于 2012-11-30T03:30:29.193 回答