我是一名初学者,正在使用 lucene.net 开发我的第一个项目,即地址搜索实用程序 lucene.net 3.0.3
使用标准分析器、查询分析器(假设我有一个字段,也存储和分析) - 示例数据:(每一行都是一个包含单个字段的文档) (邮政编码和街道列串联)
搜索
StringBuilder customQuery = new StringBuilder();
customQuery.Append(_searchFieldName + ":\"" + searchTerm + "\"^" + (wordsCount));
//这是为了短语匹配
foreach (var word in words.Where(word => !string.IsNullOrEmpty(word)))
{
customQuery.Append(" +" + _searchFieldName + ":" + word + "*");
}
//这是每个单词的前缀匹配
查询查询 = _parser.Parse(customQuery.ToString());
_searcher.Search(查询, 收集器);
以上所有(搜索)工作正常
问题
如果我搜索“Greenford road”, 我可能希望出现“SM1”的那一行(意味着我想根据邮政编码对结果进行优先排序)
我已经测试了 Query-Time-Boost,它工作正常
但有时我可能有一长串优先邮政编码(所以我不想遍历每个邮政编码并在查询时设置其优先级
我想要提高文档时间
但是无论我设置什么文档提升(在索引时),它都不会影响我的搜索结果
doc.Add(new Field(SearchFieldName, SearchField, Field.Store.YES, Field.Index.ANALYZED));
if (condition == true)
{
doc.Boost = 2; // or 5 or 200 etc (nothing works)
}
请帮忙
我试图理解相似性和评分,但那里的数学太多了......
请帮忙....
最佳答案
我自己最近遇到了这个问题,我认为这可能是由于通配符查询引起的(至少在我的情况下是这样)。这里有另一篇文章更好地解释了这个问题,并提供了一个可能的解决方案:
Lucene .net Boost not working when using * wildcard
https://stackoverflow.com/questions/23649334/