【发布时间】:2012-02-24 12:53:07
【问题描述】:
希望对 Lucene 内部工作有足够洞察力的人能够为我指明正确的方向 =)
我将跳过大部分不相关的代码,直接进入正题。我有一个 Lucene 索引,我将以下字段添加到索引中(变量被它们的字面值替换):
document.Add( new Field("Typenummer", "E5CEB501A244410EB1FFC4761F79E7B7",
Field.Store.YES , Field.Index.UN_TOKENIZED));
稍后,当我搜索我的索引(使用其他类型的查询)时,我能够验证该字段确实出现在我的索引中 - 就像循环遍历 Document.GetFields() 返回的所有字段时一样
Field: Typenummer, Value: E5CEB501A244410EB1FFC4761F79E7B7
到目前为止一切顺利:-)
现在真正的问题是 - 为什么我不能使用 TermQuery 来搜索这个值并实际得到结果。
此代码产生 0 次点击:
// Returns 0 hits
bq.Add( new TermQuery( new Term( "Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7" ) ), BooleanClause.Occur.MUST );
但如果我将其切换为 WildcardQuery(没有通配符),我会得到预期的 1 次命中。
// returns the 1 hit I expect
bq.Add( new WildcardQuery( new Term( "Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7" ) ), BooleanClause.Occur.MUST );
我已经检查了字段长度,我已经检查了我使用的是同一个分析器等等,但我仍然在第 1 格,为什么会这样。
谁能指出我应该寻找的方向?
【问题讨论】:
-
我对 Lucene.net 不是很熟悉,但是如果它使用与 java 版本相同的索引结构,您可以使用 Luke code.google.com/p/luke 来检查您的索引结构是否符合您的期望。或者,您能否检查一下 TermsIndex#seekExact 是否设法找到您的术语?
标签: lucene.net sitecore sitecore6 lucene