【问题标题】:Elastic Search different reults on URL query and JSON POSTElasticsearch 在 URL 查询和 JSON POST 上的不同结果
【发布时间】:2014-01-24 16:34:32
【问题描述】:

我正在完成一个大型在线网上商店的搜索功能。

我对附加字段有疑问。当我尝试在浏览器中搜索某些字段时,它可以工作,但是当使用 bool 过滤器发布 JSON 时,它给了我 0 个结果(不会引发错误)。

基本上:当我访问 localhost:9200/search/items/_search?pretty=true&q=field-7:Diesel 它运行良好,但在 JSON 中却不行。

我整天在谷歌上搜索,在 ElasticSeach 文档中找不到任何帮助。更让我沮丧的是 bool 查询中的其他一些字段可以正常工作,但这个不行。

我没有任何映射,并且 ES 开箱即用地为我工作 - 对“名称”字段以及任何其他字段以及该字段的查询效果很好 - 但仅限于浏览器内部。

我意识到通过浏览器查询 ES 使用所谓的“查询字符串查询”。

无论如何,这是我发布到 ElasticSearch 的 JSON 示例。 (搜索名称中包含“golf mk5”的所有项目,这些项目具有柴油燃料类型 - 通过搜索字段 7)。

  {
        "query": {
            "filtered": {
                "filter": {
                    "bool": {
                        "must_not": [
                            {
                                "term": {
                                    "sold": "1"
                                }
                            },
                            {
                                "term": {
                                    "user_id": "0"
                                }
                            }
                        ],
                        "must": [
                            {
                                "term": {
                                    "locked": "0"
                                }
                            },
                            {
                                "term": {
                                    "removed": "0"
                                }
                            },
                            {
                                "terms": {
                                    "field-7": [
                                        "Diesel"
                                    ]
                                }
                            }
                        ]
                    }
                },
                "query": {
                    "match": {
                        "name": {
                            "operator": "and",
                            "query": "+golf +Mk5"
                        }
                    }
                }
            }
        },

        "sort": [
            {
                "ordering": {
                    "price": "desc"
                }
            }
        ],
        "from": 0,
        "size": 24,
        "facets": {
            "category_count": {
                "terms": {
                    "field": "category_id",
                    "size": 20,
                    "order": "count"
                }
            },
            "price": {
                "statistical": {
                    "field": "price"
                }
            }
        }
    }

【问题讨论】:

    标签: php elasticsearch


    【解决方案1】:

    使用query_string-查询分析文本。使用term-query(和-filter),它不是。

    由于您没有指定映射,因此您将获得用于字符串字段的standard-analyzer。它标记化、小写和删除停用词。

    因此,术语Diesel 将被索引为diesel。您的terms-过滤器正在查找确切的术语Diesel,这是不同的。

    【讨论】:

    • 所以基本上我应该只调整映射以便这些字段不被分析?
    • 我添加了一个名为“fields”的嵌套列,更改了映射,使其具有索引:not_analyzed。现在,当使用相同的 JSON CURL 技术进行查询时,我无法按此嵌套字段进行搜索。
    • 这是一个完全不同的问题。 :)
    • 我相信你也可以帮我解决这个问题 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2018-11-14
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多