标签: solr-boost

SOLR完全匹配提升包含完全匹配的文本

我找不到一个更好的标题,我希望稍后如果可能的话在你的最终消遣中改变它.

我的问题:

我有一个音乐艺术家的数据库.这些看起来像这样:"dr.dre feat.ano","eminem&dr.dre","dr.dre feat.ll cool j","dr.dre","dr.dre feat.eminem&skylar grey" .我们只有两个字段:id和name.

在默认模式solr核心上,我运行此查询:"q = dr.dre",结果还可以,但不完美,如下所示:

  • 博士.dre feat.阿肯
  • 埃米纳姆博士 DRE
  • 博士.dre feat.冷静的
  • 博士.DRE
  • ...

请注意,他们得到了完全相同的分数.

我想要的是将"dr.dre"作为第一个结果,然后是所有其他结果,如下所示:

  • 博士.dre << - 博士.dre是第一位的
  • 埃米纳姆博士 DRE
  • 博士.dre feat.冷静的
  • 博士.dre feat.阿肯
  • ...

我该如何实现这一目标?(过滤器,标记器,复制字段等等并不重要.我无法更改solr中的代码,因为我在其他论坛上看到过建议)

谢谢.

solr exact-match solr-boost

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

Boost Solr结果基于包含命中的字段

我正在浏览网页寻找索引和搜索框架,并偶然发现索尔.我们绝对需要的功能是根据命中包含的字段来提升结果.

一个小例子:

考虑这样的记录:

<movie>
  <title>The Dark Knight</title>
  <alternative_title>Batman Begins 2</alternative_title>
  <year>2008</year>
  <director>Christopher Nolan</director>
  <plot>Batman, Gordon and Harvey Dent are forced to deal with the chaos unleashed by an anarchist mastermind known only as the Joker, as it drives each of them to their limits.</plot>
</movie>
Run Code Online (Sandbox Code Playgroud)

我想例如结合title,alternative_titleplot领域进入一个搜索领域,这是不看的Solr/Lucene的文档和教程后,太难了.
然而,我也希望那些受欢迎的电影获得的title分数高于击中的分数,alternative_title而那些依次命中的分数应高于该plot领域的命中率.
有没有办法在XML中表明这种评分,还是我们需要开发一些自定义评分算法?

还请注意,我给出的示例是虚构的,真实数据可能包含100多个字段.

lucene solr scoring solr-boost

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

Elasticsearch - 以更高的值提升嵌套查询

我有一个查询(很好的一部分 - 休息是不重要的像分页):

  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "is_active": true
              }
            }
          ],
          "should": [
            {
              "bool": {
                "must": [
                  {
                    "nested": {
                      "path": "skills",
                      "query": {
                        "bool": {
                          "must": [
                            {
                              "bool": {
                                "must": [
                                  {
                                    "range": {
                                      "skills.value": {
                                        "gte": "2"
                                      }
                                    }
                                  },
                                  {
                                    "term": {
                                      "skills.skill.name": "php"
                                    }
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    }
                  }
                ],
                "boost": 2
              }
            }
          ]
        }
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

这是用于搜索配置文件,其具有值为2或更高的技能"PHP".用户可以搜索多个技能=>值对.它工作正常,但我有一个问题: …

nested elasticsearch solr-boost

12
推荐指数
1
解决办法
770
查看次数

Django Haystack - 如何提升领域?

我在Django Haystack 1.2.5中遇到了一些问题.我需要提升一个领域,但显然它不起作用.我正在使用Solr 1.4.1.

我的索引:

class JobsTextIndex(indexes.SearchIndex):
    text            = indexes.CharField(document=True, use_template=True)
    job_title       = indexes.CharField(model_attr='job_title', boost=1.50)
    job_description = indexes.CharField(model_attr='job_description')
    country_ad      = indexes.CharField(model_attr='country_ad')
    zone_ad         = indexes.CharField(model_attr='zone_ad', faceted=True)
    location_ad     = indexes.CharField(model_attr='location_ad', faceted=True)
    date_inserted   = indexes.DateTimeField(model_attr='date_inserted')

    def index_queryset(self):
    """Used when the entire index for model is updated."""
    return JobsadsText.objects.filter(date_inserted__lte=datetime.datetime.now())
Run Code Online (Sandbox Code Playgroud)

我在job_title"boost = 1.50",但这显然不起作用,这是Solr生成的:

INFO: [core0] webapp=/solr path=/select/ params={facet=on&sort=date_inserted+desc&fl=*+score&start=0&q=arquiteto&facet.field=location_ad_exact&facet.field=zone_ad_exact&wt=json&fq=django_ct:(myapp.jobstext)&rows=20} hits=65 status=0 QTime=5 
Run Code Online (Sandbox Code Playgroud)

我正在做的查询是这样的:

sqs = SearchQuerySet().facet('zone_ad').facet('location_ad').order_by('-date_inserted')
Run Code Online (Sandbox Code Playgroud)

有人能给我一些线索,让我了解Haystack Boost的工作需求吗?

最好的祝福,


更新1:我需要更加重视"job_title"字段.例如,如果我正在搜索"程序员"这个词,我首先需要显示在"job_title"字段中按"日期"排序的"程序员"的结果,然后是"程序员"字样的结果. "job_description"字段.干草堆增压是实现这一目标的正确工具吗?

django solr django-haystack solr-boost

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

Solr:fieldNorm每个文档不同,没有文档提升

我希望我的搜索结果按照他们正在进行的分数排序,但分数计算不正确.这就是说,不一定是不正确的,但与预期不同,我不知道为什么.我的目标是删除任何改变分数的内容.

如果我执行匹配两个对象的搜索(其中ObjectA的分数高于ObjectB),则首先返回ObjectB.

让我们说,对于这个例子,我的查询是一个单词:"apples".

ObjectA的标题:"苹果是苹果"(2/3条款)
ObjectA的描述:"苹果 - 苹果中有苹果,现在苹果遍布苹果的所有苹果!" (6/18条款)
ObjectB的标题:"苹果很棒"(1/3条款)
ObjectB的描述:"苹果室里有苹果,现在苹果在苹果上都变坏了!" (4/18条款)

标题字段没有提升(或者更确切地说,提升为1),描述字段的提升为0.8.我没有通过solrconfig.xml或通过我正在通过的查询指定文档提升.如果有另一种指定文档提升的方法,那么我有可能错过一个.

在分析explain打印输出之后,看起来ObjectA 正在计算比ObjectB更高的分数,就像我想要的那样,除了一个区别:ObjectB的标题fieldNorm总是高于ObjectA.


以下是explain打印输出.您知道:标题字段是mditem5_tns,描述字段是mditem7_tns:

ObjectB:
1.3327172 = (MATCH) sum of:
  1.0352166 = (MATCH) max plus 0.1 times others of:
    0.9766194 = (MATCH) weight(mditem5_tns:appl in 0), product of:
      0.53929156 = queryWeight(mditem5_tns:appl), product of:
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.8109303 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
        1.0 = tf(termFreq(mditem5_tns:appl)=1)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        1.0 = …
Run Code Online (Sandbox Code Playgroud)

lucene solr relevance solr-boost

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

Elasticsearch 中权重和提升的区别

我阅读了有关在 Elasticsearch 中提升的内容。我们可以在索引或查询时应用 boosting。索引时间提升是一种静态提升,不建议使用。查询时间提升本质上是动态的。查询时间提升是很好的首选方法。

我们还可以为字段添加增强功能。例如,我们在多个字段中搜索一个术语。我们可以提升一个字段来改变文档的分数。

{
   "match":{"title":{"query":"test string","boost":10}}
},
Run Code Online (Sandbox Code Playgroud)

我读过体重。

{
     "filter": { "match": { "test": "cat" } },
     "weight": 42
}
Run Code Online (Sandbox Code Playgroud)

我的理解是在字段上应用权重以改变相关性或分数。Boost 应用于查询以更改相关性或分数。

但我不确定重量和提升的差异。

有人可以通过一些例子纠正我理解重量和提升之间的区别吗?

elasticsearch solr-boost

6
推荐指数
2
解决办法
1961
查看次数

如何通过geodist()的反向提高Solr相关性得分

所以我已经实现并成功使用了Solr 4.我必须说Solr 4真棒!无论如何,我成功地按距离排序并使用地质过滤器将结果限制在某个区域.我现在想做的是通过距离的倒数提高相关性得分.这个页面讨论它但没有说明如何做(http://wiki.apache.org/solr/SpatialSearch)

我试过以下但它给了我一个错误:

http://localhost:8983/solr/select/?q={!boost b=recip(geodist(), 1, 1000, 1000)}...

我得到的错误是:

org.apache.lucene.queryParser.ParseException: Expected identifier at pos 27 str='{!boost b=recip(geodist(), 1, 10 in ...

任何帮助,将不胜感激.谢谢!

lucene solr distance geospatial solr-boost

4
推荐指数
1
解决办法
3137
查看次数

解释Apache SOLR boost函数

我试图在 APACHE SOLR 中实现一个逻辑,以便根据天数或月数的差异,超过 2 年的文档应该受到惩罚。

我正在使用这个增强功能,这是我在谷歌上搜索了很多之后得到的。

 recip(ms(NOW,publicationDate),3.16e-11,1,1) // Currently it is set to use 1 year
Run Code Online (Sandbox Code Playgroud)

任何人都可以确认这是惩罚旧文件还是什么?

谢谢

boost solr-boost

3
推荐指数
1
解决办法
751
查看次数

如何在Solr中进行常量分数查询

我正在使用SolrNet访问Solr索引,其中我有一个名为"tags"的多值字段.我想执行以下伪代码查询:

(tags:stack)^ 10 OR(tags:over)^ 5 OR(tags:flow)^ 2

术语"堆叠"被提升10,"超过"被提升5,"流"被提升2.我所追求的结果是"叠加"的结果将显得高于"叠加"的结果流动"等

我遇到的问题是说"流"只出现在几个文档中,但是"堆栈"出现在加载中,然后由于高的idf值,带有"flow"的文档出现在带有"stack"的文档之上.

当这个项目在Lucene中直接实现时,我使用了ConstantScoreQuery,这些仅仅根据提升值消除了基于idf的idf.

如何通过Solr和SolrNet实现这一点,我有效地将Solr传递给查询字符串?如果不能,有没有其他方法可以解决这个问题?

提前致谢!

lucene solr solrnet solr-boost

2
推荐指数
1
解决办法
2878
查看次数