【问题标题】:Preference words close together in ElasticSearch / Lucene?ElasticSearch / Lucene中的偏好词紧密相连?
【发布时间】:2015-07-09 08:09:58
【问题描述】:

是否有选项可以使 ElasticSearch 对文档中搜索词彼此更接近的更高查询进行排名?

在某些情况下,我正在开发一种法律研究产品。通常,有人会通过简单地将这些词放入我们的搜索框中来搜索一个概念,例如《虚假申报法》。然而,这些词在我们的数据库中确实很常见,包括在完全不相关事物的文档中,所以结果令人失望。

如果我可以告诉 ElasticSearch 在其评分算法结果中考虑到单词非常接近的结果,那将是惊人的。

【问题讨论】:

  • “更接近”是什么意思?
  • 我的意思是搜索词之间的词相对较少——越少越好。正如安德烈在他的回答中指出的那样,它在 ElasticSearch-land 中很糟糕

标签: search lucene elasticsearch


【解决方案1】:

无论您现在有什么查询,都必须有计算分数的东西,否则您不会对得分更高或更低感兴趣。

把你现在拥有的任何东西放在boolshould中。添加另一个应使用match_phrase with slopsspan queries 之一的should 语句。

例如:

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "default_field": "some_text_field",
            "query": "False Claims Act"
          }
        },
        {
          "match_phrase": {
            "some_text_field": {
              "query": "False Claims Act",
              "slop": 0
            }
          }
        }
      ]
    }
  }
}

每个人都应该对文档的最终分数做出贡献。上面的查询将通过将匹配False Claims Act 的文档视为更好的文档,在一定程度上“提高”最终分数。

slop 用于表明您希望这些词有多“接近”。

【讨论】:

  • 这正是我想要的,谢谢。有没有办法调整“应该”查询对相关性的影响程度?另外,有没有办法让它成为倾斜的功能而不是硬编码距离?否则我们只会有一堆“应该”的查询,比如 0、50、100 等,这感觉很hacky。
  • 提升是一个更广泛的主题,它取决于查询的其他部分。例如,您可以使用:elastic.co/guide/en/elasticsearch/reference/current/…。 “slop的功能”是什么意思?
  • 我的意思是,单词越靠近,boost score 就会逐渐增加。所以如果单词是n,单词分开的分数会比n-1略差(低于),而n-1的分数会比n-2略差,等等——所以单词越接近,匹配分数越高提升。
猜你喜欢
  • 1970-01-01
  • 2012-08-13
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
相关资源
最近更新 更多