solr - 带有特殊字符的 Solr 通配符搜索
问题描述
我的用户想要使用特殊字符和通配符进行搜索。在这种情况下,破折号 (-)。
因此,如果我使用 'xxx' 或 'xxx\-' 进行搜索,我会得到包含“xxx-”和“xxx”的结果。但我不想要“xxx”,我只想要有“xxx-”的结果。(破折号)
我尝试使用 xxx-* 进行搜索,但没有给出任何结果。
架构看起来像这样
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
知道如何实现这一目标吗?
解决方案
了解问题。
标准 标记器
此标记器将文本字段拆分为标记,将空格和标点符号视为分隔符并丢弃分隔符。
在您的情况下-
,为什么搜索时没有结果的标点符号xxx-
。
您可以做的是将文本流拆分为空格的替换StandardTokenizerFactory
,WhitespaceTokenizerFactory
仅保留标记中的标点符号。
推荐阅读
- mysql - 如何使用 IN() 函数搜索精确值
- typescript - 文件夹内的特定 tsconfig.json 规则
- socket.io - socket.io 从一个命名空间向另一个命名空间发出消息
- javascript - 如何获取数组内的对象以显示在文档或控制台上
- javascript - 将字节数组从后面的代码发送到 ajax 调用
- python - ANTLR4 PLSQL 语法 Python 3 缺少函数
- angularjs - 我应该擅长什么语言来制作电子应用程序?
- git - Git rebase,多次 - 奇怪的冲突
- javascript - 如何在后台js中按计划执行chrome扩展
- angular - Angular 5 中的 API 响应中缺少数据?