【问题标题】:search for a certain text between within a range of a certain timestamp with Elasticsearch使用 Elasticsearch 在某个时间戳范围内搜索某个文本
【发布时间】:2014-04-28 18:17:29
【问题描述】:

我曾与 Elasticsearch 合作,并在互联网上做了一些研究,如何使用 Elasticsearch PHP Client API 查询具有特定文本的数据以及如何查询某个时间戳范围内的数据。现在我想将这两个查询合二为一。假设在某个时间戳的范围内搜索某个文本。有人可以告诉我如何使用 Elasticsearch PHP Client API 做到这一点吗?先谢谢了!我在互联网上搜索过,但仍然无法将这两个查询合二为一:-(

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    这里是一个布尔查询的例子,这里的逻辑是记录必须在一个日期范围内,并且还应该包含textfield字段中的文本。 您可以在 must 子句中同时包含两个查询条件。

    {
        "from": 0,
        "size": 20,
        "query": {
            "bool": {
                "must": [
                    {
                        "range": {
                            "datefield": {
                                "gte": "from",
                                "lte": "to"
                            }
                        }
                    }
                ],
                "should": [
                    {
                        "match": {
                            "textfield": {
                                "query": "Name",
                                "boost": 10
                            }
                        }
                    }
                ]
            }
        }
    }
    

    更新 - 或必须同时更新

    {
        "from": 0,
        "size": 20,
        "query": {
            "bool": {
                "must": [
                    {
                        "range": {
                            "datefield": {
                                "gte": "from",
                                "lte": "to"
                            }
                        }
                    },
                    {
                        "match": {
                            "textfield": {
                                "query": "Name",
                                "boost": 10
                            }
                        }
                    }
                ]
            }
        }
    }
    

    【讨论】:

    • 使用您的示例后,在特定时间戳的范围内搜索具有特定文本的数据是正确的,但有些数据甚至不包含该搜索文本,它们也存在。我该如何改进?
    • 我注意到带有搜索文本的数据位于顶部,而其他数据位于底部。但其他数据不应存在,因为它们不包含搜索文本。
    • 这取决于您在现场使用的分析器,ES 如何将文本分解为标记。如果您想要完全匹配,我会将该字段设置为不分析,这将仅返回与您想要的完全匹配的结果。你也可以把它移到必须的地方。看看这个多领域的链接 - elasticsearch.org/guide/en/elasticsearch/reference/0.90/… ... 抱歉,如果这不能回答你的问题,我确实尽力理解它
    • @O Connor:答案中提到将两个查询放在must 语句中。阅读bool-query docs。如果您对此还有其他问题,请改进您的问题并发布您当前的查询和示例数据。
    • 我只是将“应该”替换为“必须”,它工作正常。 @Nate 将字段设置为不分析是什么意思以及如何做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多