【发布时间】:2015-08-04 03:36:03
【问题描述】:
我想知道 solr 配置中是否有一种方法可以完全匹配丢弃短语中的那些。
示例:
搜索字符串:“你好”
结果应该是:“你好”
并且不应包含:“Hello world”、“Hi, Hello”
它应该搜索与该单词完全匹配但在短语中忽略它。
谢谢。
【问题讨论】:
标签: c# solr full-text-search config
我想知道 solr 配置中是否有一种方法可以完全匹配丢弃短语中的那些。
示例:
搜索字符串:“你好”
结果应该是:“你好”
并且不应包含:“Hello world”、“Hi, Hello”
它应该搜索与该单词完全匹配但在短语中忽略它。
谢谢。
【问题讨论】:
标签: c# solr full-text-search config
将字段类型更改为字符串。
确保您有以下条目
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
StrField 类型不被分析,而是被索引/存储。
然后更改字段键的字段类型。
<field name="fieldName" type="string" indexed="true" stored="true"/>
这样就可以进行精确搜索,因为不会有任何标记。
或者选项可以使用下面的字段类型
<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
这里的 KeywordTokenizer 没有实际的分词,所以整个输入字符串被保存为一个单独的词。
LowerCase TokenFilter 符合您的预期,这可能是您希望排序/搜索不区分大小写时
【讨论】:
我最初考虑的是邻近性,但您的情况不需要这样做。
定义一个字符串类型的字段,比如 amn_name_ss -- 这是一个存储的字符串
使用 "" 搜索时,字符串会寻找精确搜索
例如:amn_name_ss:"Hello" 将只返回具有 Hello 值的文档
创建文档为 {"id":"amn1","amn_name_ss":"Hello","type":"AMN"} {"id":"amn2","amn_name_ss":"Hello World","type":"AMN"}
查询: http://hostname:8080/solr/collection1/select?q=%3A&fq=type%3AAMN&wt=json&indent=true
会给出如下结果
【讨论】: