我们最近升级了我们工作的CMS,并且必须从Lucene.net V2.3.1.301升级到V2.9.4.1
我们在原始解决方案中使用了CustomScoreQuery,它使用内置查询无法实现各种过滤.(GEO,多日期范围等)
自从从旧版本迁移到新版本的Lucene后,它开始返回文档,即使我们检查结果时它们的分数为0甚至是负数
public LuceneTest()
{
Lucene.Net.Store.Directory luceneIndexDirectory = FSDirectory.Open(new System.IO.DirectoryInfo(@"C:\inetpub\wwwroot\Project\build\Data\indexes\all_site_search_en"));
Analyzer analyzer = new WhitespaceAnalyzer();
IndexSearcher searcher = new IndexSearcher(luceneIndexDirectory, true);
QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_23, "", analyzer);
parser.SetAllowLeadingWildcard(true);
Query dateQuery = ComposeEventDateQuery(new DateTime(2015, 11, 23), new DateTime(2015,11,25), searcher);
BooleanQuery combinedQuery = new BooleanQuery();
BooleanQuery.SetMaxClauseCount(10000);
combinedQuery.Add(dateQuery, BooleanClause.Occur.MUST);
TopDocs hitsFound = searcher.Search(dateQuery, 1000);
System.Console.WriteLine(String.Format("Found {0} matches with the date filters", hitsFound.TotalHits));
System.Console.ReadKey();
}
public static Query ComposeEventDateQuery(DateTime fromDate, DateTime ToDate, IndexSearcher MySearcher)
{
BooleanQuery query = new BooleanQuery(); …Run Code Online (Sandbox Code Playgroud) 我正在努力研究如何提高solr搜索结果的得分.我的应用程序需要从solr结果中获取分数,并根据查询的结果有多好来显示一些"星星".5星=差不多/精确到0星,意味着不能很好地匹配搜索,例如只有一个元素命中.然而,我得到的分数从1.4到0.8660254都返回结果,我会给5星.我需要做的是以某种方式将这些结果转换为百分比,以便我可以用正确的星数来标记这些结果.
我运行的查询给出了1.4分:
euallowed:true AND(等级:"2:1")
给我0.8660254分数的查询是:
euallowed:true AND(等级:"2:1"或等级:"1st")
我已经更新了Similarity,以便tf和idf返回1.0,因为我只对文档中有一个术语而不是文档中该术语的编号感兴趣.这就是我的相似性代码:
import org.apache.lucene.search.Similarity;
public class StudentSearchSimilarity extends Similarity {
@Override
public float lengthNorm(String fieldName, int numTerms) {
return (float) (1.0 / Math.sqrt(numTerms));
}
@Override
public float queryNorm(float sumOfSquaredWeights) {
return (float) (1.0 / Math.sqrt(sumOfSquaredWeights));
}
@Override
public float sloppyFreq(int distance) {
return 1.0f / (distance + 1);
}
@Override
public float tf(float freq) {
return (float) 1.0;
}
@Override
public float idf(int docFreq, int numDocs) {
//return (float) (Math.log(numDocs / (double) (docFreq + …Run Code Online (Sandbox Code Playgroud) 我有一个包含许多条目的Solr索引,并在查询时返回一些子集 - 每个条目都有一些分数,(明显).一旦结果与分数一起返回,我希望能够"保留"高于某个分数的结果(即仅具有特定质量的结果).当返回的子集可能是什么时,是否可以这样做?
我问,因为在某些查询中似乎有一个得分为0.008的结果导致了一个不错的匹配,而其他查询得分较高会导致匹配不佳.
理想情况下,我只是在寻找一种方法来获取顶级x条目,只要它们至少具有一定的质量.
提前致谢!
我需要比较不同Lucene查询中搜索结果的相关性.
实际上我有一组索引的文本文档,当在这个集合上进行搜索时,我想要返回的不是这个集合中的N个最佳结果,而是所有适合查询的结果"足够好".
这个"足够好"的参数是可配置的(例如介于0(文档绝对不相关)和1(文档是最佳匹配))但我希望它以相同的方式影响所有查询.
根据我在互联网上发现的内容,这不是一项简单的任务.有人能给我一个关于如何解决这个问题的提示吗?
非常感谢!