2012-11-20 52 views
0

我有一个ElasticSearch数据库,里面有“页面”。如果匹配特定ID,提升Tire中查询的结果?

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 } 

我应该添加什么来做以上两件事?如果用户输入“标题:政策手册”(显然没有引号),这会对事情产生怎样的影响?

回答

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 
     } 
    ] 
    } 
} 
+0

你甚至可以添加一个'should'条款,使用'query_string'查询(见[这里](https://github.com/karmi/。 rubygems.org/blob/search-steps/app/controllers/searches_controller.rb#L16-L17)),向您的用户展示Lucene查询语法。 – karmi

相关问题