0

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

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

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

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

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

query { text :_all, search_term } 

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

4

1 回答 1

1

第一个问题可以通过使用带有匹配 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
      }
    ]
  }
}
于 2012-11-20T18:23:32.717 回答