【问题标题】:Elasticsearch "query_string" query error displays as "Lexical error"Elasticsearch“query_string”查询错误显示为“词法错误”
【发布时间】:2019-09-20 22:04:39
【问题描述】:

应用版本
弹性搜索:v.7.1
Laravel:v5.8

操作系统版本:Ubuntu 18(服务器)/Windows 10(开发 PC)

Elasticsearch 搜索 API 的“query_string”查询返回类似“Lexical error”的错误消息——说明查询中有问题。

复制步骤

一个。我们正在使用包含 4629 个字符(包括字母和符号,如括号和双引号)的“query_string”查询
湾。当我们使用我们的 PHP 和 Python 应用程序进行查询时,会弹出标题中提到的错误

主要问题

我在这里做错了什么还是应用程序级错误/错误?一直在尝试使用“simple_query_string”等替代方法,但它具有不同的行为,因此我们非常热衷于使用 Elasticsearch 的 query_string 查询

这是查询

"query_string" => [
    "fields" => ['title', 'content'],
    "query" => """
        (("Salvador "Sal" San Buenaventura Panelo")) OR ("Christopher Lawrence Go") OR ("DILG Undersecretary Epimaco Densing") OR ("Rodolfo Fariñas") OR ("Francis Tolentino" AND ("De Lima" OR "Leila De Lima")) OR ("Reynaldo V. Umali" AND ("De Lima" OR "Leila De Lima")) OR ("Bong Revilla") OR (("Jose "Joe" Callangan Calida")) OR ("Gus S. Tambunting" OR "GusTambunting" AND ("De Lima" OR "Leila De Lima")) OR ("Ramon Bong Revilla" OR "Bong Revilla" AND ("De Lima" OR "Leila De Lima")) OR (Lacson) OR ("Francis Ng Tolentino") OR ("Jose Calida") OR ("José Ruperto Martín Marfori Andanar") OR ("Prospero Pichay Jr.") OR ("Pantaleon Alvarez" AND ("De Lima" OR "Leila De Lima")) OR ("Prospero Pichay" AND ("De Lima" OR "Leila De Lima")) OR ("Senator Vicente Sotto") OR ("Paolo "Pulong" Zimmerman Duterte") OR ("Prospero Arreza Pichay Jr.") OR ("Rudy Fariñas" AND ("De Lima" OR "Leila De Lima")) OR ("Paolo Duterte") OR ("Rudy Fariñas") OR ("Fredenil Castro") OR ("Salvador B. Belaro Jr.") OR ("Sen. Imee Marcos") OR ("Manny Pacquiao") OR ("Senator Aquilino "Koko" Pimentel III" OR "Sen. Aquilino "Koko" Pimentel III") OR ("Senator Aquilino Pimentel III" OR "Sen. Aquilino Pimentel III" OR "Senator Aquilino Pimentel") OR ("Senator Vicente C. Sotto III") OR ("Tito Sotto") OR ("Bato dela Rosa") OR ("Sen. Bato") OR ("Hon. Reynaldo V. Umali") OR ("Gus S. Tambunting") OR ("Tito Sotto" OR "Senator Vicente Sotto" AND ("De Lima" OR "Leila De Lima")) OR ("Bato dela Rosa" OR "Senator Ronald "Bato" dela Rosa"("De Lima" OR "Leila De Lima")) OR ("Bong Go" OR "Christopher Lawrence Go" AND ("De Lima" OR "Leila De Lima")) OR ("Paolo Duterte" AND ("De Lima" OR "Leila De Lima")) OR ("Fredenil H. Castro" OR "Fredenil Castro" AND ("De Lima" OR "Leila De Lima")) OR ("Koko Pimentel") OR ("Paolo Zimmerman Duterte") OR ("Pantaleon Diaz Alvarez") OR ("Salvador Belaro" AND ("De Lima" OR "Leila De Lima")) OR ("Ramon Revilla") OR ("Senator Bong Go") OR (Panfilo) OR ("Jose Callangan Calida") OR ("Salvador San Buenaventura Panelo") OR ("Pantaleon "Bebot" Diaz Alvarez") OR ("Fredenil H. Castro" OR "Fredenil Castro") OR ("Salvador Belaro Jr.") OR ("Salvador Belaro") OR ("Reynaldo V. Umali") OR ("Senator Koko Pimentel III) OR ("Sen. AND Koko AND Pimentel AND III" OR "Sen. AND Koko AND Pimentel") OR ("Bong AND Go") OR ("Ramon AND Bong AND Revilla") OR ("Senator AND Panfilo AND Lacson" OR "Panfilo AND Lacson" OR "Ping AND Lacson" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Manny AND Pacquiao" OR "Senator AND Manny AND Pacquiao" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Salvador AND Panelo" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Epimaco AND Densing" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Senator AND Sotto") OR ("Vicente AND Sotto") OR ("Panfilo AND Lacson" OR "Ping AND Lacson") OR ("Ronald AND dela AND Rosa") OR ("Senator AND Revilla") OR ("Prospero AND Pichay") OR ("Jose AND Calida" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Senator AND Francis AND Tolentino") OR ("Senator AND Ronald AND dela AND Rosa") OR ("Menardo AND Guevarra" OR "Menardo AND I. AND Guevarra") OR ("Rodolfo AND "Rudy" AND Castro AND Fariñas") OR ("Senator AND Imee AND Marcos" OR "Imee AND Marcos" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Gus AND S. AND Tambunting" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Ronald AND “Bato” AND dela AND Rosa") OR ("Senator AND Bato AND dela AND Rosa") OR ("Senator AND Ramon AND Revilla AND Jr.") OR ("Sen. AND Francis AND Tolentino") OR ("Francis AND Tolentino") OR (("María AND Imelda AND Josefa AND "Imee" AND Romualdez AND Marcos")) OR ("Pulong AND Duterte") OR ("Rodolfo AND Castro AND Fariñas") OR ("Menardo AND Guevarra" OR "Menardo AND I. AND Guevarra"("De AND Lima" OR "Leila AND De AND Lima")) OR ("Christopher AND Lawrence AND “Bong” AND Go") OR ("Senator AND Imee AND Marcos") OR ("Justice AND Secretary AND Menardo AND Guevarra" OR "Justice AND Secretary AND Menardo AND I. AND Guevarra") OR ("Epimaco AND Densing") OR ("Fredenil AND "Fred" AND H. AND Castro") OR ("Koko AND Pimentel" OR "Senator AND Aquilino AND Pimentel AND III" OR "Sen. AND Aquilino AND Pimentel AND III" OR "Senator AND Aquilino AND Pimentel" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Martín AND Andanar" ("De AND Lima" OR "Leila AND De AND Lima")) OR ("Senator AND Ronald AND "Bato" AND dela AND Rosa") OR ("Christopher AND Lawrence AND "Bong" AND Tesoro AND Go") OR ("Senator AND Christopher AND Lawrence AND "Bong" AND Tesoro AND Go") OR ("Senator AND Panfilo AND Lacson") OR ("Senator AND Manny AND Pacquiao") OR ("Salvador AND Panelo") OR ("Martín AND Andanar") OR ("Pantaleon AND Alvarez")
        """

【问题讨论】:

  • 很难说...这是一个相当长的查询...尝试从单个约束开始,然后添加更多约束直到它开始中断。
  • 错误状态为“Encountered after ...”,因此查询字符串可能因为太大(?)而被截断。也可能是由于未转义的保留字符:+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
  • 是的,@EricLavault 先生,我们假设查询太长了,但是有没有办法让“query_string”接受这样的查询?因为这是我们旧系统使用狮身人面像的行为:(
  • 你好先生@Val,我们假设错误提示是因为查询太长,但是每当我们使用 simple_query_string 时,整个查询都有效,但是什么simple_query_string 的危险在于它对用户所需的关键字并不严格
  • 编辑您的问题并以文本格式而不是图像添加查询,然后我们可以轻松为您提供帮助

标签: elasticsearch lucene


【解决方案1】:

query 中删除双引号("")并尝试如下所示,希望它会工作。

我的索引上的工作示例:

GET locations/_search
  {
    "size": 1,
    "sort": [
      {
        "_score": {
          "order": "desc"
        }
      },
      {
        "property_count": {
          "order": "desc"
        }
      }
    ],
    "query": {
      "bool": {
        "must": [
          {
            "match": {
              "country_code.keyword": "IT"
            }
          },
          {
            "query_string": {
              "fields": ["display","content"],
              "query": "((Salvador Sal San Buenaventura Panelo)) OR (Christopher Lawrence Go) OR (DILG Undersecretary Epimaco Densing) OR (Rodolfo Fariñas) OR (Francis Tolentino AND (De Lima OR Leila De Lima)) OR (Reynaldo V. Umali AND (De Lima OR Leila De Lima)) OR (Bong Revilla) OR ((Jose Joe Callangan Calida)) OR (Gus S. Tambunting OR GusTambunting AND (De Lima OR Leila De Lima)) OR (Ramon Bong Revilla OR Bong Revilla AND (De Lima OR Leila De Lima)) OR (Lacson) OR (Francis Ng Tolentino) OR (Jose Calida) OR (José Ruperto Martín Marfori Andanar) OR (Prospero Pichay Jr.) OR (Pantaleon Alvarez AND (De Lima OR Leila De Lima)) OR (Prospero Pichay AND (De Lima OR Leila De Lima)) OR (Senator Vicente Sotto) OR (Paolo Pulong Zimmerman Duterte) OR (Prospero Arreza Pichay Jr.) OR (Rudy Fariñas AND (De Lima OR Leila De Lima)) OR (Paolo Duterte) OR (Rudy Fariñas) OR (Fredenil Castro) OR (Salvador B. Belaro Jr.) OR (Sen. Imee Marcos) OR (Manny Pacquiao) OR (Senator Aquilino Koko Pimentel III OR Sen. Aquilino Koko Pimentel III) OR (Senator Aquilino Pimentel III OR Sen. Aquilino Pimentel III OR Senator Aquilino Pimentel) OR (Senator Vicente C. Sotto III) OR (Tito Sotto) OR (Bato dela Rosa) OR (Sen. Bato) OR (Hon. Reynaldo V. Umali) OR (Gus S. Tambunting) OR (Tito Sotto OR Senator Vicente Sotto AND (De Lima OR Leila De Lima)) OR (Bato dela Rosa OR Senator Ronald Bato dela Rosa(De Lima OR Leila De Lima)) OR (Bong Go OR Christopher Lawrence Go AND (De Lima OR Leila De Lima)) OR (Paolo Duterte AND (De Lima OR Leila De Lima)) OR (Fredenil H. Castro OR Fredenil Castro AND (De Lima OR Leila De Lima)) OR (Koko Pimentel) OR (Paolo Zimmerman Duterte) OR (Pantaleon Diaz Alvarez) OR (Salvador Belaro AND (De Lima OR Leila De Lima)) OR (Ramon Revilla) OR (Senator Bong Go) OR (Panfilo) OR (Jose Callangan Calida) OR (Salvador San Buenaventura Panelo) OR (Pantaleon Bebot Diaz Alvarez) OR (Fredenil H. Castro OR Fredenil Castro) OR (Salvador Belaro Jr.) OR (Salvador Belaro) OR (Reynaldo V. Umali) OR (Senator Koko Pimentel III) OR (Sen. AND Koko AND Pimentel AND III OR Sen. AND Koko AND Pimentel) OR (Bong AND Go) OR (Ramon AND Bong AND Revilla) OR (Senator AND Panfilo AND Lacson OR Panfilo AND Lacson OR Ping AND Lacson (De AND Lima OR Leila AND De AND Lima)) OR (Manny AND Pacquiao OR Senator AND Manny AND Pacquiao (De AND Lima OR Leila AND De AND Lima)) OR (Salvador AND Panelo (De AND Lima OR Leila AND De AND Lima)) OR (Epimaco AND Densing (De AND Lima OR Leila AND De AND Lima)) OR (Senator AND Sotto) OR (Vicente AND Sotto) OR (Panfilo AND Lacson OR Ping AND Lacson) OR (Ronald AND dela AND Rosa) OR (Senator AND Revilla) OR (Prospero AND Pichay) OR (Jose AND Calida (De AND Lima OR Leila AND De AND Lima)) OR (Senator AND Francis AND Tolentino) OR (Senator AND Ronald AND dela AND Rosa) OR (Menardo AND Guevarra OR Menardo AND I. AND Guevarra) OR (Rodolfo AND Rudy AND Castro AND Fariñas) OR (Senator AND Imee AND Marcos OR Imee AND Marcos (De AND Lima OR Leila AND De AND Lima)) OR (Gus AND S. AND Tambunting (De AND Lima OR Leila AND De AND Lima)) OR (Ronald AND “Bato” AND dela AND Rosa) OR (Senator AND Bato AND dela AND Rosa) OR (Senator AND Ramon AND Revilla AND Jr.) OR (Sen. AND Francis AND Tolentino) OR (Francis AND Tolentino) OR ((María AND Imelda AND Josefa AND Imee AND Romualdez AND Marcos)) OR (Pulong AND Duterte) OR (Rodolfo AND Castro AND Fariñas) OR (Menardo AND Guevarra OR Menardo AND I. AND Guevarra(De AND Lima OR Leila AND De AND Lima)) OR (Christopher AND Lawrence AND “Bong” AND Go) OR (Senator AND Imee AND Marcos) OR (Justice AND Secretary AND Menardo AND Guevarra OR Justice AND Secretary AND Menardo AND I. AND Guevarra) OR (Epimaco AND Densing) OR (Fredenil AND Fred AND H. AND Castro) OR (Koko AND Pimentel OR Senator AND Aquilino AND Pimentel AND III OR Sen. AND Aquilino AND Pimentel AND III OR Senator AND Aquilino AND Pimentel (De AND Lima OR Leila AND De AND Lima)) OR (Martín AND Andanar (De AND Lima OR Leila AND De AND Lima)) OR (Senator AND Ronald AND Bato AND dela AND Rosa) OR (Christopher AND Lawrence AND Bong AND Tesoro AND Go) OR (Senator AND Christopher AND Lawrence AND Bong AND Tesoro AND Go) OR (Senator AND Panfilo AND Lacson) OR (Senator AND Manny AND Pacquiao) OR (Salvador AND Panelo) OR (Martín AND Andanar) OR (Pantaleon AND Alvarez)"
            }
          }
        ]
      }
    },
    "_source": [
      "location_id",
      "display",
      "parent_path",
      "parent_location_id",
      "country",
      "country_code",
      "east",
      "west",
      "north",
      "south",
      "category"
    ]
  }

查看示例https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-query-ex-request

【讨论】:

  • 你好,非常感谢@Always Sunny先生的回答,我在ES查询方面处于中级水平,所以我明白了你建议的答案。但是,我认为这个错误出现在 Lucene - Elasticsearch 关系中,那是因为我已经遇到了很多查询,但是这个是最长的,除了你建议的答案的查询有一个非常错误的想法,因为我正在寻找这些 关键字已经出现,而不是来自位置
  • 您可以根据需要使用任何索引名称,我只是将我的索引名称与位置共享。您将从我给定的链接中获得的主要思想。希望对你有帮助
猜你喜欢
  • 2019-01-23
  • 2017-07-10
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2018-09-26
相关资源
最近更新 更多