Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Apache 在SOLR中的查询期间忽略特殊字符_Apache_Solr_Solrj_Solrcloud_Solr4 - Fatal编程技术网

Apache 在SOLR中的查询期间忽略特殊字符

Apache 在SOLR中的查询期间忽略特殊字符,apache,solr,solrj,solrcloud,solr4,Apache,Solr,Solrj,Solrcloud,Solr4,我想在SOLR中的查询期间忽略特殊字符。 例如: 假设我们有一个SOLR中的文档,内容为:我的名字是a-B-C 内容:A-B-C检索文档 但是内容:ABC不返回任何文档 我的要求是内容:ABC应返回一份文件。 所以基本上我想忽略这一点-在查询期间。这里您必须为字段内容设置字段类型 字段类型可以有两个单独的分析器。一个用于索引,一个用于查询 在这里,您可以使用“Word Delimiter Token Filter”创建内容索引“A-B-C”,如ABC,A-B-C 使用catenateWords。

我想在SOLR中的查询期间忽略特殊字符。 例如: 假设我们有一个SOLR中的文档,内容为:我的名字是a-B-C

内容:A-B-C检索文档 但是内容:ABC不返回任何文档

我的要求是内容:ABC应返回一份文件。
所以基本上我想忽略这一点-在查询期间。

这里您必须为字段内容设置字段类型

字段类型可以有两个单独的分析器。一个用于索引,一个用于查询

在这里,您可以使用
“Word Delimiter Token Filter”
创建内容索引
“A-B-C”
,如
ABC,A-B-C

使用
catenateWords
。添加为
catenateWords=1
。 其工作如下: “热点传感器”→ “热点传感器”。在你的例子中是“A-B-C”。它将生成“ABC”

这是一个例子

用法:

<analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="true" catenateWords="1"/>
</analyzer>

<analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>


这将创建多个索引,您可以使用
ABC
A-B-C

进行搜索,当令牌之间有特殊字符时(即
A-B-C
应该匹配
ABC
,而不仅仅是
A
),您可以使用。这将允许您将所有这些字符替换为空字符串,从而有效地将
ABC
转换为分析过程的下一步

<analyzer>
  <charFilter class="solr.PatternReplaceCharFilterFactory"
             pattern="[^a-zA-Z0-9 ]" replacement=""/>
  <tokenizer ...>
  [...]
</analyzer>

[...]
这将保留所有常规ascii字母、数字和空格,同时用空字符串替换任何其他字符。您可能需要调整该角色组以包含更多角色,但这取决于您的原始内容和处理方式

这应该在索引和查询时完成(只要您希望用户能够查询
A-B-C
)。如果您想对这些匹配项进行不同的评分,请使用具有不同分析链的多个字段-例如,将一个字段保留为仅在空白处标记,然后如果您在
a-B-C
上有匹配项,则将其提高(使用
qf=text\ws^5 other\u field


这不会改变字段实际存储的内容,因此返回的数据仍然是相同的-只是如何执行匹配。

这将为
a
B
C
创建单独的标记,而这将不会与
ABC
@UMAMAHESWAR匹配搜索:我已经修改了答案。请检查它是否适合你。