我的Solr 4.0
设置中包含以下索引文档,其标题字段包含文档 -
我的标题字段为solr.StrField
(字符串)。我还有[{1}}字段的copyField
title
字段title_token
,类型solr.TextField
,其中包含标记符StandardTokenizerFactory
和过滤器LowerCaseFilterFactory
。< / p>
当用户仅搜索To
时,为了获取title
以To
开头的文档,我使用Solr
查询title:To*
。工作良好。显示文档1和2。
但是,当用户搜索To
(在收件人后面有空格)时,我会将此查询发送到Solr
,如title:To *
(在To和*之间有空格)。理想情况下,只应显示第一个文档。但是会显示所有文件。
当我与title:To *
一起查询&debugQuery=true
时,查询被解析为"parsedquery_toString":"title:to title:*"
。
由于title:*
将显示所有文档,因此将显示所有文档。
如何查询To *
哪些文件会为我提供title
以To
开头的所有文档(在To之后有空格),在这种情况下,文档1应该是显示的?
我正在Embedded Solr server
上Web App
上运行Tomcat
。我使用solrj
来查询和获取结果。
答案 0 :(得分:2)
您应该转义空格field:to\ *
,以便形成的查询为title:to *
否则它会匹配所有文件。
Wildcard Queries: - 请注意,引用短语中不支持通配符。他们将被视为白色空间。
在前缀,通配符和模糊搜索上,不对搜索词执行文本分析
因此,如果您使用小写过滤器,To*
将与索引文档不匹配。