相关疑难解决方法(0)

Lucene返回非正分数的文件

我们最近升级了我们工作的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)

c# lucene lucene.net sitecore

17
推荐指数
1
解决办法
299
查看次数

我如何规范化solr/lucene得分?

我正在努力研究如何提高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)

lucene search solr normalization tf-idf

15
推荐指数
1
解决办法
1万
查看次数

是否可以"合理地"设置Solr分数阈值,与返回的结果无关?(即Solr评分是否以任何方式标准化)

我有一个包含许多条目的Solr索引,并在查询时返回一些子集 - 每个条目都有一些分数,(明显).一旦结果与分数一起返回,我希望能够"保留"高于某个分数的结果(即仅具有特定质量的结果).当返回的子集可能是什么时,是否可以这样做?

我问,因为在某些查询中似乎有一个得分为0.008的结果导致了一个不错的匹配,而其他查询得分较高会导致匹配不佳.

理想情况下,我只是在寻找一种方法来获取顶级x条目,只要它们至少具有一定的质量.

提前致谢!

indexing search solr solandra

8
推荐指数
1
解决办法
6970
查看次数

Lucene:比较各种查询的结果

我需要比较不同Lucene查询中搜索结果的相关性.

实际上我有一组索引的文本文档,当在这个集合上进行搜索时,我想要返回的不是这个集合中的N个最佳结果,而是所有适合查询的结果"足够好".

这个"足够好"的参数是可配置的(例如介于0(文档绝对不相关)和1(文档是最佳匹配))但我希望它以相同的方式影响所有查询.

根据我在互联网上发现的内容,这不是一项简单的任务.有人能给我一个关于如何解决这个问题的提示吗?

非常感谢!

java lucene indexing search

6
推荐指数
1
解决办法
1035
查看次数

标签 统计

lucene ×3

search ×3

indexing ×2

solr ×2

c# ×1

java ×1

lucene.net ×1

normalization ×1

sitecore ×1

solandra ×1

tf-idf ×1