Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据solr中的运算符对同一字段执行精确搜索和词干搜索_Java_Solr - Fatal编程技术网

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

Java 如何根据solr中的运算符对同一字段执行精确搜索和词干搜索,java,solr,Java,Solr,我以java对象的形式获取搜索请求,从中构造SOLR查询对象并查询索引 例如,假设用户希望对名为title的字段进行精确搜索。他会发送一份表格的查询 Field = "title", value = "Algebra", Operator = "EQUALS" 当我看到操作符为“EQUALS”时,构造一个如下的solr查询 title:Algebra 对于通配符或词干搜索,请求应该是这样的 Field = "title", value = "Algebra", Operator

我以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(通过复制字段选项),因此,当我使用运算符时:它进行词干搜索并检索标题字段中包含代数词的结果,其中我期望的输出只是标题为代数的记录

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

因此,基本上我希望一个字段既支持词干搜索(和所有其他文本\常规字段选项),也支持基于我传递给它的运算符的精确匹配。
甚至有可能。如果是这样,pl将指导我如何完成相同的操作。

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

虽然没有“全局”约定,但我建议根据字段名称的处理采用命名约定。如果将fieldname作为字符串,则将fieldname_词干作为文本字段(或fieldname_文本),如果看到运算符='LIKE',则将_词干或_文本附加到fieldname。您也可以用另一种方法,对常规的fieldname进行词干分析和处理,同时将fieldname_clean作为确切的版本