Lucene.Net SynonymFilter 具有多个单词短语

标签 lucene lucene.net synonym

我正在使用 Lucene.net,并尝试实现 SynonymFilter 以在产品数据库中的项目可以不同命名或拼写不同时提供扩展术语 - 例如“ Spanner ”>“ Spanner ”,或“割草机”>“割草机”。

作为测试,我设置了一个 SynonymMap,如下所示:

String base1 = "lawnmower";
String syn1 = "lawn mower";
String base2 = "spanner";
String syn2 = "wrench";

SynonymMap.Builder sb = new SynonymMap.Builder(true);
sb.Add(new CharsRef(base1), new CharsRef(syn1), true);
sb.Add(new CharsRef(base2), new CharsRef(syn2), true);
SynonymMap smap = sb.Build();

搜索“spanner”或“wrench”会返回包含其中任一单词的所有术语。搜索“lawn mower”或“lawnmower”只会返回与输入搜索条件完全匹配的术语。

对于同义词中的多个单词短语还需要做其他事情吗?

另外,我如何扩展以表示 3 个或更多术语,例如“割草机”、“割草机”、“割草机”、“割草机”?

谢谢

最佳答案

an example单元测试中的多词同义词。您必须自己拆分单词并在它们之间插入 SynonymMap.WORD_SEPARATOR (空字符)。为了使这更容易,SynonymMap.Builder 上有一个 Join 方法。

String base1 = "lawnmower";
String syn1 = "lawn mower";

SynonymMap.Builder sb = new SynonymMap.Builder(true);
CharsRef syn1Chars = sb.Join(Regex.Split(syn1, " +"), new CharsRef());
sb.Add(new CharsRef(base1), syn1Chars, true);
SynonymMap smap = sb.Build();

这是一个可以快速完成此操作的扩展方法。

public static class SynonymMapBuilderExtensions
{
    private static Regex Space = new Regex(" +", RegexOptions.Compiled);

    public static void AddPhrase(this SynonymMap.Builder builder, string input, 
        string output, bool keepOrig)
    {
        CharsRef outputRef = builder.Join(Space.Split(output), new CharsRef());
        builder.Add(new CharsRef(input), outputRef, keepOrig);
    }
}

无论同义词是否有空格,您都可以使用此扩展方法,并且如果您在代码中的其他任何地方不需要它们,则不必费心创建 CharsRef 对象.

String base1 = "lawnmower";
String syn1 = "lawn mower";
String base2 = "spanner";
String syn2 = "wrench";

SynonymMap.Builder sb = new SynonymMap.Builder(true);
sb.AddPhrase(base1, syn1, true);
sb.AddPhrase(base2, syn2, true);
SynonymMap smap = sb.Build();

关于Lucene.Net SynonymFilter 具有多个单词短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47264371/

相关文章:

lucene - 如何在 Lucene 搜索结果中进行分组?

search - 同义词样式文本查找和解析

lucene - Lucene 中的倒排索引

php - Zend_Search_Lucene查询解析问题

lucene - 如何提高单字符PrefixQuery性能?

c# - Lucene.Net 多字段多词搜索和通配符使用和短语搜索,模糊搜索都

makefile - Makefile 中的别名目标名称

indexing - Solr:同义词文件不应超过多大的大小?

lucene - ElasticSearch 中的排序和最新记录

.net - Lucene.NET - 索引单个大于 1GB 的大文件