从经典 asp 调用 elasticsearch 不利于简单搜索,但无法使复杂搜索起作用

calling elasticsearch from classic asp works against a simple search, but cannot get a complex search to work

如果我使用以下代码构造向 Elastic 发送一个简单的查询,在返回的响应中我将获得预期的结果:

webaddress = "http://localhost:9200/" + index + "/_search?q='hello world'"

set xml = server.Createobject("MSXML2.ServerXMLHTTP")

xml.Open "GET", webaddress ,False

xml.setRequestHeader "Authorization", "Basic " & Base64Encode("elastic:elastic123")

xml.Send

现在,如果我想发送一个更复杂的查询,那么像上面那样将查询放在单个 'q' 参数上是不切实际的,甚至可能是不可能的。即

查询:

get myindex/_search
{
    "query":{"match": {"headline": "overseas territory"},
             "match" : {"bodytext": "british territory"}
            }
}

所以我会把它构建成一个变量。让我们称之为 mySearch

然后我的网址变成:

webaddress = "http://localhost:9200/" + index + "/_search"

和 xml.send 变为:

xml.Send mySearch

mySearch 被忽略,我从变量 webaddress 收到默认的前 10 条记录。

上面的搜索词是在脚本中按以下方式构建的:

Function TermBuilder(query)

    dim queryArray
    dim termString

    queryArray = split(query," ")

    termString = "{ ""query"" :{"

    For i = LBound(queryArray) to UBound(queryArray)
        termString = termString + """match"": {""headline"": """ + queryArray(i) + """ } ,""match"": { ""bodytext"": """  + queryArray(i) + """},"

    next
    termString = mid(termString, 1, len(termString) - 1) 'remove trailing comma

    termString = termString + "}}"

    TermBuilder = termString

  End Function

我应该如何通过我的复杂搜索以便它被识别。我没有卷曲的奢侈

您在使用 ASP.NET 吗?我不知道 ASP,所以我无法帮助您检查代码的正确性。

但是 ASP.NET 有一个客户 API。

https://www.elastic.co/guide/en/elasticsearch/client/index.html

我认为这会有所帮助。在我的例子中,我将 ES 客户端用于 PHP 并且效果很好 :)

[编辑] OP 发现索引和搜索词命名中使用的大小写很重要(请参阅本页上 OP 的回答)。修复了查询开始运行的问题。

看来您可能正在访问服务器,但无论您发送什么都不是可行的命令。我很想知道您构造的变量的实际值,因为经典 ASP 也使用双引号作为其字符串分隔符。

但是,可能是您的搜索字符串格式不正确。 Definitive Guide Elastic search documentation 非常详细,提供了很多例子。

这是多字段搜索的文档,导致 ms 怀疑您的查询格式不正确。

似乎 multiple-query strings 的搜索应该包含 'bool' 关键字。

或者 multi-match 查询可能会有用。

在没有看到您的实际查询字符串的情况下,无法确定问题的原因,但希望这会提出前进的方向。

好吧,我遇到了几个问题,第一个是我需要使用 'POST' 而不是 'GET' 同样,当我创建索引时,我使用 CamelCase 表示法创建了属性,但在索引的 _source 属性 中,它们都是小写的。删除索引并使用小写字母创建属性并重新索引索引后,我现在正在获取所需的记录。