使Lucene索引为值并存储另一个值

时间:2010-12-28 12:26:54

标签: lucene.net

我希望Lucene.NET在索引存储值的修改后的精简版本时存储一个值。例如考虑价值:

this_example-has some/weird (chars) 100%

我希望它像那样存储(这样我可以准确地检索显示在结果列表中),但我希望lucene将其索引为:

this example has some weird chars 100

(您会看到,就像原始值的“已消毒”版本一样),用于简化搜索。

我认为这将是分析仪的工作,但我不想搞砸自己。理想情况下,解决方案应该删除所有不是字母,数字或引号的内容,在索引之前用空格替换删除的字符。

有关如何实施该建议的任何建议吗?

这是因为我正在为电子商务搜索索引产品,而且有些产品令人毛骨悚然。我认为这会改善搜索的自信。

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您不想要自定义分析器,请尝试将该值存储为单独的非索引字段,并使用简单的正则表达式生成已清理的版本。

var input = "this_example-has some/weird (chars) 100%";
var output = Regex.Replace(input, @"[\W_]+", " ");

您提到需要另一个Analyzer才能获得某些搜索功能。不要忘记PerFieldAnalyzerWrapper,它允许您在同一文档中使用不同的分析器。

public static void Main() {
    var wrapper = new PerFieldAnalyzerWrapper(defaultAnalyzer: new StandardAnalyzer(Version.LUCENE_29));
    wrapper.AddAnalyzer(fieldName: "id", analyzer: new KeywordAnalyzer());

    IndexWriter writer = null; // TODO: Retrieve these.
    Document document = null;
    writer.AddDocument(document, analyzer: wrapper);
}

答案 1 :(得分:0)

这是正确的,这是分析仪的工作。我首先使用像luke这样的工具来查看标准分析器在进入使用内容之前对您的术语做了什么 - 它可以很好地剥离噪声字符和单词。