gpt4 book ai didi

elasticsearch - 查询字符串为空时返回所有文档

转载 作者:行者123 更新时间:2023-12-03 00:47:03 26 4
gpt4 key购买 nike

说我有以下映射:

{
'properties': {
{'title': {'type': 'text'},
{'created': {'type': 'text'}}
}
}

有时用户会通过 created进行查询,有时会通过 titlecreated进行查询。在这两种情况下,我都希望查询JSON尽可能相似。当用户不使用 created进行查询时,创建仅按 title过滤的查询的好方法是什么?

我尝试了类似的东西:
    {
bool: {
must: [
{range: {created: {gte: '2010-01-01'}}},
{query: {match_all: {}}}
]
}
}

但这没有用。编写此查询的最佳方法是什么?

最佳答案

您的查询无法正常工作,因为created的类型为text而不是date,对字符串日期的范围查询将无法正常工作,因此您应将映射从text类型更改为date并重新索引数据。

按照this逐步重新索引您的数据(具有新的映射)。

现在,如果我理解正确,您想使用一个通用查询,该查询根据用户输入过滤title或/和created

在这种情况下,我的建议是使用Query String

一个示例(版本7.4.x):

映射

PUT my_index
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"created": { -------> change type to date instead of text
"type": "date"
}
}
}
}

索引几个文件
PUT my_index/_doc/1
{
"title":"test1",
"created": "2010-01-01"
}

PUT my_index/_doc/2
{
"title":"test2",
"created": "2010-02-01"
}

PUT my_index/_doc/3
{
"title":"test3",
"created": "2010-03-01"
}

搜索查询(已创建)
GET my_index/_search
{
"query": {
"query_string": {
"query": "created:>=2010-02-01",
"fields" : ["created"]
}
}
}

结果
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"title" : "test2",
"created" : "2010-02-01"
}
},
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"title" : "test3",
"created" : "2010-03-01"
}
}]

搜索查询(标题)
GET my_index/_search
{
"query": {
"query_string": {
"query": "test2",
"fields" : ["title"]
}
}
}

结果
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.9808292,
"_source" : {
"title" : "test2",
"created" : "2010-02-01"
}
}
]

搜索查询(标题和创建的)
GET my_index/_search
{
"query": {
"query_string": {
"query": "(created:>=2010-02-01) AND test3"
}
}
}

结果
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.9808292,
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.9808292,
"_source" : {
"title" : "test3",
"created" : "2010-03-01"
}
}
]

查询字符串中的 字段-您可以同时提及这两个字段。如果删除fields,则查询将应用于映射中的所有字段。

希望这可以帮助

关于elasticsearch - 查询字符串为空时返回所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59336562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com