Solr和Hibernate Search的多字同义词

时间:2012-05-23 06:39:40

标签: hibernate search solr lucene hibernate-search

我有一个peers.txt文件,内容如下

car accessories, gadi marmat

我正在将汽车配件编入索引,以便将其扩展为汽车配件 gadi marmat

我希望整个同义词匹配,以便在查询 gadi marmat 时,返回汽车配件的记录。

我正在使用shingle filter factory来扩展查询,以便在搜索 gadi marmat 时,它会扩展为 gadi gadi marmat marmat ,并且由于 gadi marmat 被查询为单个令牌,它应该匹配汽车配件并返回结果,但事实并非如此,但是当我搜索汽车配件时,它返回结果。因此必须使用具有多个单词的索引同义词的prblm。

请建议。

1 个答案:

答案 0 :(得分:3)

同义词文件仅用于更改您搜索的单词。 所以,如果你写

汽车配件=> gadi marmat

当编译器匹配“汽车配件”时,它会尝试匹配“gadi marmat”

它就像一个令牌

混合像这样的分析器元素

可以获得良好的效果
@AnalyzerDef(name = "integram",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
     @TokenFilterDef(factory = LowerCaseFilterFactory.class),
     @TokenFilterDef(factory = StopFilterFactory.class, params = {
         @Parameter(name = "words", value = "lucene/dictionary/stopwords.txt"),
         @Parameter(name = "ignoreCase", value = "true"),
         @Parameter(name = "enablePositionIncrements", value = "true")
     }),
     @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
            @Parameter(name = "language", value = "English")
     }),
     @TokenFilterDef(factory = SynonymFilterFactory.class, params = {
         @Parameter(name = "synonyms", value = "lucene/dictionary/synonyms.txt"),
         @Parameter(name = "expand", value = "false")
     }),
     @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
            @Parameter(name = "language", value = "English")
     })
})