如何根据solr中的运算符对同一字段执行精确搜索和词干搜索

时间:2012-12-07 09:45:16

标签: java solr

我以java对象的形式获取搜索请求,我从中构造一个SOLR查询对象并查询索引。

例如,假设用户想要对名为title的字段进行精确搜索。他会发送表格的查询

  Field = "title", value = "Algebra", Operator = "EQUALS"

当我将运算符视为“EQUALS”时,构造一个像这样的solr查询

  title:Algebra

对于外卡或词干搜索,请求将是这样的,

  Field = "title", value = "Algebra", Operator = "LIKE"

由于操作符是“LIKE”,我正在构建的solr查询是

  title:*Algebra*

这里的问题是外卡和其他词干选项工作标题字段在我的schema.xml中定义为text_general和text(通过copy field选项),所以当我使用operator“:”时它确实阻止了搜索和检索我在标题字段中有代数字的结果,我期待的输出只是标题为代数的记录。

我知道一个解决方案,我需要在配置文件中将标题字段更改为“字符串”。但这会影响我的搜索和外卡搜索选项。

所以基本上我想要一个字段来支持词干搜索(以及所有其他text_general字段选项)以及基于我传递给它的运算符的精确匹配。 它甚至可能吗?如果是这样,pl指导我如何完成相同的工作。

1 个答案:

答案 0 :(得分:1)

您必须有两个字段,一个用于词干/已处理版本,另一个用于干净字符串版本。使用< copyField>确保在索引时填充两者。

虽然没有针对此的“全局”约定,但我建议根据字段名称的处理采用字段名称的命名约定。如果您将fieldname作为字符串,则将fieldname_stemmed作为文本字段(或fieldname_text),如果您看到Operator ='LIKE',则将_stemmed或_text附加到fieldname。您也可以采用相反的方式,将常规字段名称进行处理和处理,同时将fieldname_clean作为确切版本。