0

「ページ」を含むElasticSearchデータベースがあります。

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

各ページにはドメインのIDがあります。すべてのクエリで特定のドメインからの結果を後押しできるようにしたいと思います。したがって、静的に設定されたXのdomain_idと一致する場合は、返されるすべての検索結果でより関連性が高くなります。

次に、たとえばコンテンツと一致するよりも、関連性の高いタイトルまたは説明と一致するテキスト(複数の単語の場合もあります)に基づいてブーストしたいと思います。

現在、Tiregemに次のクエリがあります。

query { text :_all, search_term } 

上記の2つのことを行うには何を追加する必要がありますか?ユーザーが「title:policymanuals」(明らかに引用符なし)を入力した場合、それは物事にどのように影響しますか?

4

1 に答える 1

1

最初の問題は、domain_idに一致するフィルターでカスタムフィルタースコアクエリを使用することで解決できます。2番目の問題は、各フィールドを個別に検索し、適切なブースト係数を適用することで解決できます。全体として、次のようになります。

{
  "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 に答える