【问题标题】:How to perform both exact search and stemmed search on the same field depending upon the operator in solr如何根据 solr 中的运算符在同一字段上执行精确搜索和词干搜索
【发布时间】:2012-12-07 09:45:16
【问题描述】:

我以 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_general 字段选项)以及基于我传递给它的运算符的精确匹配。 有没有可能。如果是这样,请指导我如何完成同样的事情。

【问题讨论】:

    标签: java solr


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      相关资源
      最近更新 更多