lucene.net - 为什么这个 Lucene 查询是 "contains"而不是 "startsWith"?

标签 lucene.net startswith

string q = "m";
Query query = new QueryParser("company", new StandardAnalyzer()).Parse(q+"*");

将导致查询为 prefixQuery :company:a*

我仍然会得到像“Fleet Africa”这样的结果,很明显,A 不在开始时,因此给了我不想要的结果。
Query query = new TermQuery(new Term("company", q+"*"));

将导致查询成为 termQuery :company:a* 并且不返回任何结果。可能是因为它将查询解释为完全匹配,而我的值都不是“a*”文字。
Query query = new WildcardQuery(new Term("company", q+"*"));

将返回与前缀查询相同的结果;

我究竟做错了什么?

最佳答案

StandardAnalyzer 会将“Fleet Africa”标记为“fleet”和“africa”。您的 a* 搜索将匹配后面的术语。

如果您想将“Fleet Africa”视为一个术语,请使用不会在空格上拆分字符串的分析器。 KeywordAnalyzer 是一个示例,但您可能仍希望将数据小写,以便查询不区分大小写。

关于lucene.net - 为什么这个 Lucene 查询是 "contains"而不是 "startsWith"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/605899/

相关文章:

Lucene.NET 词干问题

lucene - 找出 maxClauseCount 设置为 1024 错误的原因

c# - Lucene:查找最接近的数字

r - 使用 grepl 创建基于另一列的列

c# - StartsWith 方法 C# 不返回 TRUE

c# - Lucene.NET 没有删除文档?

Streams 上的startsWith 的Scala 实现

javascript - 使用startsWith函数识别邮政编码的前三位数字

jquery - 在每个循环中使用 jQuery 属性从选择器开始

c# - 我可以将 Lucene 索引存储在数据库或文件系统以外的其他位置吗?