Elasticsearch简单查询字符串查询与精确文本搜索

时间:2015-01-20 13:39:54

标签: elasticsearch

我有一个包含多个字段的文档。

文件

  • 备注
  • 描述
  • 标题

我想使用google搜索,例如搜索。

  • “蓝色汽车”-diesel + gas
  • “蓝色车”+混合
  • “蓝色车”橙色
  • 蓝色汽车橙色

当我使用“蓝色汽车”时,它必须是精确的值匹配而根本没有任何分析。它必须只找到没有词干等的确切短语。

为此我得到了一个这样的工作版本 - >

{
  "query": {
    "multi_match": {
      "query": "blue car",
      "fields": [
        "text",
        "message",
        "whatever"
      ],
      "type": "phrase"
    }
  }
}

虽然对于其他类型的搜索,例如-diesel或+ hybrid。我正在考虑使用那个好像支持那个。

{
   "query": {
        "simple_query_string": {
           "fields": [
            "text",
            "message",
            "whatever"],
           "default_operator": "and",
           "query": "-diesel +hybrid"
        }
     }
}

遗憾的是,即使我在查询中将文本放在引号中,简单的查询字符串查询也会使用分析器。

你们是否知道如何将两者结合起来呢?我可以使用bool查询将它们组合在一起吗?

1 个答案:

答案 0 :(得分:5)

以下是使用bool query

查询“蓝色汽车”-diesel + hybrid'的示例
{
    "query": {
        "bool": {
            "must": [
                {
                    "multi_match": {
                        "query": "blue car",
                        "fields": [
                            "text",
                            "message",
                            "whatever"
                        ],
                        "type": "phrase"
                    }
                },
                {
                    "multi_match": {
                        "query": "hybrid",
                        "fields": [
                            "text",
                            "message",
                            "whatever"
                        ]
                    }
                }
            ],
            "must_not": {
                "multi_match": {
                    "query": "diesel",
                    "fields": [
                        "text",
                        "message",
                        "whatever"
                    ]
                }
            }
        }
    }
}