我不知道如何处理包含空格的同义词!
我有以下配置:
SOLR 配置文件
<fieldType ... >
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
preserveOriginal="1"
splitOnCaseChange="1"
generateWordParts="1"
generateNumberParts="1"
catenateNumbers="1"
catenateAll="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="2" max="70" />
<filter class="solr.SynonymFilterFactory" synonyms="syn.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我的文件:syn.txt
st., st => saint
istambul => istanbul
airport, apt => aéroport
NYC => New York
pt., pt => port
brussels => bruxelles
除了同义词之外,一切都工作正常:
"NYC => New York"
我做了一些研究,发现了以下内容:
请记住,虽然 SynonymFilter 很乐意处理包含多个单词的同义词(即:“sea biscuit,sea biscit,seabiscuit”)
处理此类同义词的推荐方法是在索引时扩展同义词。这是因为查询时可能会出现两个潜在问题:
Lucene QueryParser 在向分析器提供任何文本之前对空白进行标记,因此,如果一个人搜索单词 sea biscit,分析器将分别给出单词“sea”和“biscit”,并且不会知道它们与同义词匹配。
短语搜索(即:“sea biscit”)将导致 QueryParser 将整个字符串传递给分析器,但如果 SynonymFilter 配置为扩展同义词,那么当 QueryParser 从分析器获取标记结果列表时,它会将构造一个不会达到预期效果的 MultiPhraseQuery。
这是因为分析器可用于指示两个术语占据相同位置的机制有限:无法指示“短语”与术语占据相同位置。
对于我们的示例,生成的 MultiPhraseQuery 将是“(sea | sea | seabiscuit) (biscuit | biscit)”,这与文档中出现的“seabiscuit”的简单情况不匹配
因此,我尝试更改我的配置文件并在索引中添加过滤器,但它不起作用。
有人有什么想法吗?
您正在使用显式映射=>
.
The Solr文档 says
显式映射与“=>”左侧的任何标记序列相匹配,并用右侧的所有替代项替换。这些类型的映射忽略架构中的扩展参数。
所以我猜如果你搜索NYC
你什么也得不到,因为它被替换为New York
在索引时间。
相反,您可以尝试将它们声明为等效同义词吗?即喜欢NYC, New York
代替NYC => New York
.
那么我相信你可以搜索其中任何一个,结果都是一样的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)