首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene不会索引文档中的某些术语

问Lucene不会索引文档中的某些术语
EN

Stack Overflow用户
提问于 2017-05-31 16:54:54
回答 1查看 216关注 0票数 0

我一直在尝试使用Lucene来索引我们的代码数据库。不幸的是,有些术语在索引中被省略了。例如,在下面的字符串中,我可以搜索除“version-number”之外的任何内容:

代码语言:javascript
复制
version-number "cAELimpts.spl SCOPE-PAY:10.1.10 25nov2013kw101730 Setup EMployee field if missing"

我尝试用Lucene.NET 3.1和pylucene 6.2.0实现它,结果相同。

下面是我在Lucene.NET中实现的一些细节:

代码语言:javascript
复制
using (var writer = new IndexWriter(FSDirectory.Open(INDEX_DIR), new CustomAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED))
{
  Console.Out.WriteLine("Indexing to directory '" + INDEX_DIR + "'...");
  IndexDirectory(writer, docDir);
  Console.Out.WriteLine("Optimizing...");
  writer.Optimize();
  writer.Commit();
}

CustomAnalyzer类:

代码语言:javascript
复制
public sealed class CustomAnalyzer : Analyzer
{
    public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
    {
        return new LowerCaseFilter(new CustomTokenizer(reader));
    }
}

最后,CustomTokenizer类:

代码语言:javascript
复制
public class CustomTokenizer : CharTokenizer
{
    public CustomTokenizer(TextReader input) : base(input)
    {
    }

    public CustomTokenizer(AttributeFactory factory, TextReader input) : base(factory, input)
    {
    }

    public CustomTokenizer(AttributeSource source, TextReader input) : base(source, input)
    {
    }

    protected override bool IsTokenChar(char c)
    {
        return System.Char.IsLetterOrDigit(c) || c == '_' || c == '-' ;
    }
}

它看起来像"version-number“和其他一些术语没有被索引,因为它们出现在99%的文档中。这会是问题的原因吗?

编辑:根据请求,FileDocument类:

代码语言:javascript
复制
public static class FileDocument
{
    public static Document Document(FileInfo f)
    {

        // make a new, empty document
        Document doc = new Document();

        doc.Add(new Field("path", f.FullName, Field.Store.YES, Field.Index.NOT_ANALYZED));
        doc.Add(new Field("modified", DateTools.TimeToString(f.LastWriteTime.Millisecond, DateTools.Resolution.MINUTE), Field.Store.YES, Field.Index.NOT_ANALYZED));
        doc.Add(new Field("contents", new StreamReader(f.FullName, System.Text.Encoding.Default)));

        // return the document
        return doc;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-06-15 18:27:47

我想我是在犯傻。我将点击数限制在500,然后对找到的点击数应用过滤器。预计将按照索引的顺序检索这些项目。因此,当我查找索引末尾的内容时,它会告诉我什么都没有找到。实际上,它将检索预期的500个项目,但它们都会被过滤掉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44280086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档