2017-11-10 12 views
0

를 동작하지 않습니다 :호출 elasticsearch는 간단한 검색에 대해 작동하지만, 나는 내 예상 결과를 얻을 다시 응답에서 다음 코드 구문을 사용하여 탄성에 간단한 쿼리를 보낼 경우 복잡한 검색

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"} 
      } 
} 

그래서 내가 변수에이를 구축 할 것입니다.

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

와는 XML.send이된다 :

xml.Send mySearch 

mySearch은 무시됩니다 내가 변수 webaddress에서 10 개 개의 레코드 먼저 기본을 다시받을 내 webaddress이되고 그 다음

을 mySearch 호출 할 수 있습니다.

위 검색어는 스크립트에 다음과 같은 방법으로 내장되어 있습니다 : 그것은 인식되도록

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 

가 어떻게 내 복잡한 검색을 통과해야한다. 나는 컬을 사치스럽게 여긴다.

+0

이것은 XML 질문이 아닙니다. 직접 WinHttpRequest를 사용하면 똑같은 문제가 발생합니다. – Bob77

+0

@ Bob77 왜 이것이 XML 질문이라고 생각합니까? 나는 그것에 대해 어떤 단서를 볼 수 없었다. –

+0

메서드를 _POST_로 변경 했습니까? 'xml.Open "POST", webaddress, False' – SearchAndResQ

답변

1

좋아, 내가 처음으로 두 번째 문제는 내 '색인'을 만들 때 '얻으'와 반대로 'POST'를 사용해야한다는 것이고, CamelCase 표기법을 사용하여 속성을 만들었지 만 색인의 _source 속성은 모두 소문자였습니다. 인덱스를 삭제하고 소문자를 사용하여 속성을 만들고 인덱스를 다시 색인 한 다음 원하는 레코드를 가져옵니다.

+1

최종 결과를 게시 해 주셔서 감사합니다. –

0

ASP.NET을 사용하고 있습니까? 나는 ASP를 모르므로 코드의 정확성을 도울 수 없습니다.

그러나 ASP.NET 용 클라이언트 API가 있습니다.

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

나는이 의지가 도움이 생각합니다. 필자의 경우 PHP 용 ES 클라이언트를 사용하고 있습니다. :)

+0

예, 게시물을 사용해 보았습니다. 아무런 차이가 없습니다. – bilpor

+0

아니요, 여기에 관련된 .NET이 없습니다. 언급했듯이 고전적인 ASP입니다. 그렇지 않으면 예,이 라이브러리를 사용할 것입니다. – bilpor

0

[편집] OP는 색인 및 검색어의 이름 지정에 사용 된 대소 문자가 중요 함을 발견했습니다 (이 페이지의 OP의 답변 참조).). 쿼리가 작동하기 시작한 것을 수정했습니다.

아마도 당신은 서버에 도착한 것으로 보이지만 보내시는 것은 실행 가능한 명령이 아닙니다. 클래식 ASP는 문자열 구분 기호로 큰 따옴표를 사용하기 때문에 사용자가 생성 한 변수의 실제 값을 확인하는 것이 궁금합니다.

그러나 검색 문자열의 형식이 잘못되었을 수 있습니다. Definitive Guide Elastic search documentation은 매우 자세하며 많은 예제를 제공합니다.

여러 필드 검색에 대한 설명입니다. 이로 인해 ms가 사용자의 쿼리가 잘못 구성되었다고 의심됩니다.

multiple-query strings으로 검색 할 때 'bool'키워드가 포함 된 것으로 보입니다.

또는 아마도 multi-match 쿼리가 사용됩니다.

실제 쿼리 문자열을 보지 않고도 문제의 원인에 대해 확실 할 수는 있지만 가능하면 앞으로 나아갈 수있는 방법을 제안합니다.

+0

아니요. Kibana에서 직접 검색을 수행하면 올바른 결과가 검색됩니다. – bilpor

+0

ok - 변수 값을 게시하십시오. –

+0

그래, 쿼리가 코드에서 작성되는 방법을 포함하도록 질문을 수정했습니다. Lucene 쿼리로 충분하다고 생각했습니다. – bilpor