【问题标题】:Boosting results of a query in Tire, if match particular ID?如果匹配特定的 ID,提升轮胎中的查询结果?
【发布时间】:2012-11-08 21:18:41
【问题描述】:

我有一个 ElasticSearch 数据库,其中包含“页面”。

class Page
  field :domain_id 
  field :page_id 
  field :title 
  field :description 
  field :filetype 
  field :content
end 

每个页面都有一个域的 ID。我希望能够在所有查询中提升特定域的结果。因此,如果它与 X 的 domain_id 匹配,静态设置,它将在我们返回的每个搜索结果中更加相关。

其次,我想根据匹配标题或描述的文本(可以是多个单词)进行提升,而不是匹配内容。

我目前在轮胎 gem 中有以下查询。

query { text :_all, search_term } 

我应该添加什么来完成上述 2 件事?如果用户输入“title:policy manuals”(显然没有引号),这将如何影响事情?

【问题讨论】:

    标签: ruby search elasticsearch tire


    【解决方案1】:

    第一个问题可以通过将Custom Filters Score Query 与匹配 domain_id 的过滤器一起使用来解决。第二个问题可以通过分别搜索每个字段并应用适当的提升因子来解决。总而言之,它可能看起来像这样:

    {
      "custom_filters_score": {
        "query": {
          "bool": {
            "should": [
              {
                "text": {
                  "title": "SEARCH_TERM",
                  "boost": 2
                }
              },
              {
                "text": {
                  "description": "SEARCH_TERM",
                  "boost": 2
                }
              },
              {
                "text": {
                  "content": "SEARCH_TERM",
                  "boost": 1
                }
              }
            ]
          }
        },
        "filters": [
          {
            "filter": { "term": {"domain_id": "X"}},
            "boost": 3
          }
        ]
      }
    }
    

    【讨论】:

    • 您甚至可以添加另一个should 子句,使用query_string 查询(参见例如here),向您的用户公开Lucene 查询语法。
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多