首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用ElasticSerach进行高级搜索

用ElasticSerach进行高级搜索
EN

Stack Overflow用户
提问于 2014-08-19 10:45:35
回答 1查看 66关注 0票数 0

我用PHP创建了一个小应用程序,并使用ES。我的要求是好的,但我得到了好的结果。我的请求看起来是这样的:

link:9200/index/_search?from=0&size=130&q=try:'yes‘%2 2Bbrand:’BMW‘%2Bmodel:’意甲5‘%2 2Bprice:500到700000

当我发送这个查询时,我们会回复我的模型‘意甲3’和‘意甲5',这是很棒的,但当我发送这个查询时,我只想恢复’宝马‘和’意甲5‘。

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2014-08-19 13:21:14

首先,您应该查看文档,以便更熟悉这些概念(analyze / 查询和筛选器的区别),这些概念对于很好地使用ElasticSearch非常重要。您可以找到一个很好的入门文档这里

您的问题是您的“模型”字段是一个字符串,默认情况下使用标准分析器进行分析。

它输出2个令牌,因为模型名称中有空格,您可以看到如果使用_analyze端点:

代码语言:javascript
运行
复制
GET _analyze?analyzer=standard&text='Serie 5'

{
   "tokens": [
      {
         "token": "serie",
         "start_offset": 1,
         "end_offset": 6,
         "type": "<ALPHANUM>",
         "position": 1
      },
      {
         "token": "5",
         "start_offset": 7,
         "end_offset": 8,
         "type": "<NUM>",
         "position": 2
      }
   ]
}

最重要的是,您使用的是一个查询,但它将返回与匹配的所有结果,甚至部分。所以,你的结果中肯定有这两辆车,但“意甲5级”赛车肯定是第一辆(因为它匹配得更好),而不是“3号级”,后者用一个更高的_score属性来表示。

您需要使用一个项过滤器,它只返回包含您提供的术语值的文档。但是,由于它是在条件上工作的,您必须将字段的映射更改为"not_analyzed“,这样才能保持原样:

代码语言:javascript
运行
复制
PUT /test/car/_mapping
{
    "properties":{
        "model":{
            "type": "string",
            "index":"not_analyzed"
        }
    }
}

最后,搜索请求将类似于这样(价格标准为距离滤波器,并使用过滤器将两者结合在一起):

代码语言:javascript
运行
复制
GET /test/car/_search
{
    "query": {
        "filtered": {
           "filter": {
               "and": {
                  "filters": [
                     {
                     "term": {
                          "model": "Serie 3"
                       }
                     },
                     {
                         "range": {
                            "price": {
                               "from": 500,
                               "to": 70000
                            }
                         }
                     }
                  ]
               }
           }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25381429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档