Solr - 如何区分*和*

时间:2013-02-15 23:46:47

标签: java solr lucene solrj

我的Solr 4.0设置中包含以下索引文档,其标题字段包含文档 -

  1. 工作
  2. 拓扑
  3. ...<更多>
  4. 我的标题字段为solr.StrField(字符串)。我还有[{1}}字段的copyField title字段title_token,类型solr.TextField,其中包含标记符StandardTokenizerFactory和过滤器LowerCaseFilterFactory。< / p>

    当用户仅搜索To时,为了获取titleTo开头的文档,我使用Solr查询title:To*。工作良好。显示文档1和2。

    但是,当用户搜索To(在收件人后面有空格)时,我会将此查询发送到Solr,如title:To *(在To和*之间有空格)。理想情况下,只应显示第一个文档。但是会显示所有文件。

    当我与title:To *一起查询&debugQuery=true时,查询被解析为"parsedquery_toString":"title:to title:*"

    由于title:*将显示所有文档,因此将显示所有文档。

    如何查询To *哪些文件会为我提供titleTo开头的所有文档(在To之后有空格),在这种情况下,文档1应该是显示的?

    我正在Embedded Solr serverWeb App上运行Tomcat。我使用solrj来查询和获取结果。

1 个答案:

答案 0 :(得分:2)

您应该转义空格field:to\ *,以便形成的查询为title:to * 否则它会匹配所有文件。

Wildcard Queries: - 请注意,引用短语中不支持通配符。他们将被视为白色空间。

在前缀,通配符和模糊搜索上,不对搜索词执行文本分析 因此,如果您使用小写过滤器,To*将与索引文档不匹配。