【发布时间】:2011-11-10 09:08:59
【问题描述】:
我正在使用 lucene 在通讯录中搜索产品。我想根据一些特定的标准来提升搜索结果。 (例如,位置字段中的匹配应该比实体名称中的匹配具有更大的相关性。)这是我的案例的固定标准。
我正在尝试通过在索引时调用 SetBoost() 方法将 boostfactor 与 Field 一起存储。但是结果的分数也不如预期。它为每个字段考虑相同的提升值。
谁能建议我哪里出错了?
我用来构建索引的代码。
Directory objIndexDirectory =
FSDirectory.Open(new System.IO.DirectoryInfo(<PathOfIndexFolder>));
StandardAnalyzer objAnalyzer =
new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
IndexWriter objWriter = new IndexWriter(
objIndexDirectory, objAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
Document objDocument = new Document();
Field objName =
new Field("Name", "John Doe", Field.Store.YES, Field.Index.ANALYZED);
Field objLocation =
new Field("Location", "NY", Field.Store.YES, Field.Index.NOT_ANALYZED);
objLocation.SetBoost((2f);
objDocument.Add(objName);
objDocument.Add(objLocation);
objWriter.AddDocument(objDocument);
我想要实现的是, 假设索引中有三个条目:
- 纽约州约翰·多伊
- 约翰·福,新泽西州
- 纽约州 XYZ
在这种情况下,如果搜索查询是“John NY”,那么结果应该具有类似的相关性
- 纽约州约翰·多伊
- 纽约州 XYZ
- 约翰·福,新泽西州
【问题讨论】:
-
你能添加一些代码来显示你是如何构建索引的吗?
-
你好守门员!我已经添加了代码和我的预期场景。
标签: c# lucene.net