elasticsearch 从经典asp调用elasticsearch对简单搜索有效,但无法使复杂搜索正常工作,elasticsearch,asp-classic,msxml,elasticsearch,Asp Classic,Msxml" /> elasticsearch 从经典asp调用elasticsearch对简单搜索有效,但无法使复杂搜索正常工作,elasticsearch,asp-classic,msxml,elasticsearch,Asp Classic,Msxml" />

elasticsearch 从经典asp调用elasticsearch对简单搜索有效,但无法使复杂搜索正常工作

elasticsearch 从经典asp调用elasticsearch对简单搜索有效,但无法使复杂搜索正常工作,elasticsearch,asp-classic,msxml,elasticsearch,Asp Classic,Msxml,如果我使用以下代码构造向Elastic发送一个简单查询,那么在返回的响应中,我将获得预期结果: webaddress = "http://localhost:9200/" + index + "/_search?q='hello world'" set xml = server.Createobject("MSXML2.ServerXMLHTTP") xml.Open "GET", webaddress ,False xml.setRequestHeader "Authorization"

如果我使用以下代码构造向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”参数上。i、 e

查询:

get myindex/_search
{
    "query":{"match": {"headline": "overseas territory"},
             "match" : {"bodytext": "british territory"}
            }
}
所以我会把它建立成一个变量。让我们称之为我的研究

然后我的网址变成:

webaddress = "http://localhost:9200/" + index + "/_search"
xml.Send mySearch
而xml.send变为:

webaddress = "http://localhost:9200/" + index + "/_search"
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

我应该如何通过复杂的搜索以使其被识别。我没有curl的奢侈

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

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

我认为这会有帮助。在我的例子中,我使用的是ES client for PHP,效果非常好:

[Edit]OP发现索引和搜索词命名中使用的大小写非常重要,请参见本页OP的答案。已修复查询开始运行的问题

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

但是,可能是您的搜索字符串格式不正确。该示例非常详细,并提供了许多示例

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

使用的搜索似乎应该包含一个“bool”关键字

或许这个查询会有用


如果看不到您的实际查询字符串,就不可能确定问题的原因,但希望这能提供一个前进的方向。

好的,我有几个问题,第一个问题是我需要使用“POST”而不是“GET”。在创建索引时,我使用CamelCase符号创建属性,但是在索引的源属性中,它们都是小写的。删除索引并使用小写字母创建属性并对索引重新编制索引后,我现在可以获得所需的记录。

这不是XML问题。直接使用WinHttpRequest也会遇到同样的问题。@Bob77是什么让你认为这是一个XML问题?我看不出任何线索。你把方法改成POST了吗?Open POST,webaddress,false这个问题被错误地标记为MSXML。不,事实并非如此。如果我直接在Kibana中执行搜索,我将检索正确的结果OK,我已经修改了这个问题,以包括查询是如何在代码中构建的。我认为Lucene查询就足够了。不,这里没有.NET。如前所述,它是经典的asp。否则是的,我会使用这个图书馆做得很好,谢谢你发布你的最终结果。