【问题标题】:Lucene partly parcer (parcer with contains)Lucene 部分解析器(parcer with contains)
【发布时间】:2015-03-15 03:21:28
【问题描述】:

我得到了 Lucenes 解析器,它从表中返回给我评论。它看起来像:

private static IEnumerable<Comment> _search(string searchQuery, string searchField = "")
{
  using (var searcher = new IndexSearcher(_directory, false))
  {
     var analyzer = new StandardAnalyzer(Version.LUCENE_30);
     {
            var parser = new QueryParser(Version.LUCENE_30, searchField, analyzer);
            var query = parseQuery(searchQuery, parser);
            var hits = searcher.Search(query, 1000).ScoreDocs;
            var results = _mapLuceneToDataList(hits, searcher);
            return results;
    }
  }
}
////Some code
private static Query parseQuery(string searchQuery, QueryParser parser)
{
    return parser.Parse(searchQuery.Trim());
}

我收到了这样的评论:“sometext python sometext”。当我使用 _search("python", "Text") 时,它会返回我的表。但是当我使用 _search("pyth", "Text") 时,它什么也找不到。

我绝对知道,问题在

var query = parseQuery(searchQuery, parser);
var hits = searcher.Search(query, 1000).ScoreDocs;

但我不知道,我的查询有问题,或者你应该在搜索器中转移一些参数...有人有什么建议吗?

亲切的问候。

【问题讨论】:

  • 你应该阅读 Lucene 文档,主要阅读分析器和查询类型。您可以通过查询pyth* (WildcardQuery/PrefixQuery) 进行搜索来实现您想要的结果
  • 部分帮助替换:return parser.Parse(searchQuery.Trim());返回 parser.Parse(searchQuery.Trim() + "");但它需要像“pythololo”这样的文本。但我还需要像“ololopythololo”这样的文字;返回 parser.Parse("" + searchQuery.Trim() + "*");没有帮助。

标签: c# parsing lucene query-parser


【解决方案1】:

首先,我应该允许前导通配符。在“解析器”之后我应该写

parser.AllowLeadingWildcard = true;

然后我应该在我的查询中使用“*”字符:

return parser.Parse("*" + searchQuery.Trim() + "*");

现在可以工作了。感谢卢卡斯的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多