使用不同的查询短语搜索Elasticsearch

时间:2014-03-27 17:09:08

标签: ruby elasticsearch

我对弹性搜索很新,所以我在努力解决这个问题:

我有一个带有名为title属性的elasticsearch索引,例如,我在此属性上有以下值:

"Questions To The First Minister" {1}

"First person to speak"  {2}

"First to speak will be Minister Dave"  {3}

在我的网站上,我有一个文本框,用户可以在其中输入以下短语:

"First Minster"

which should return {1}

First Minister

which should return {1} {2} {3}

First+Minister 

which should return {1} {3}

目前,我能想到这样做的唯一方法是根据用户输入文本框的内容进行3次不同的查询:

第一个:

{
  query:{
     bool:{
      must:[
            {
            match:{
               title:{
                      query: First Minister,
                      type: phrase
                     }
                  }
            }
           ]
          }
        }
  min_score: 1
}

第二个:

{
  query:{
    bool:{
      must:[{
       match:{
         terms: {
         title:[
          "first",
          "minister"
              ]}
             }]
           }
          }
}

第三个我并没有像我的PM那样深入思考,只是告诉我这个场景。

问题是:

有没有更好的方法来实现这一点,这可以通过对ES的单个查询来实现,或者是"正确的"这样做的方法是,查看输入的输入,然后根据它改变查询?

1 个答案:

答案 0 :(得分:0)

我想我可能有解决方案。

我在这里张贴这个,其他任何人都在寻找它(也许有人可以告诉我这是否可以做到这一点)

我想我可以使用query_string查询只使用1个查询。

如果我搜索" \"第一部长" \"它返回{1}

如果我搜索"首先是AND Minster"它返回{3}

和"首先是OR部长"它返回{1} {2} {3}