2016-06-10 2 views
0
GET candidates1/candidate/_search 
{ 
    "fields": ["contactInfo.emails.main"], 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "contactInfo.emails.main": "com" 
      } 
     } 
     ] 
    } 
    } 
} 

GET candidates1/candidate/_search 
{ 
    "size": 5, 
    "fields": [ 
    "contactInfo.emails.main" 
    ], 
    "query": { 
    "match": { 
     "contactInfo.emails.main": "com" 
    } 
    } 
} 

안녕, 내가 [ '[email protected]', 'arelysf456 @ gmai1 같은 결과를 얻고있다 위의 쿼리를 사용하고 있습니다 .com ','[email protected] ']와 같은 이메일을받지 못했습니다. ['[email protected] ','[email protected] ','[email protected] ']고무줄 검색 이메일 검색 불일치 사용하여 COM

그러나 "gmail.com"과 일치하는 쿼리를 사용할 때 gmail.com을 사용하는 결과가 표시됩니다.

제 질문은 첫 번째 쿼리에서 "com"을 사용하고있을 때 gmail.com에 "com"이있는 것으로 예상되는 결과입니다. 그러나 그것은 일어나지 않습니다.

참고 : 우리는 거의 2 백만 개의 emailid를 가지고 있으며 그 중 대부분은 gmail.com, yahoo.com 또는 hotmail이지만 다른 유형은 거의 없습니다.

답변

1

"contactInfo.emails.main" 필드는 analyzed field 인 것 같습니다.

elasticsearch에서 모든 문자열 필드는 Standard Analyzer을 사용하여 분석되고 토큰으로 변환됩니다. analyze api을 사용하여 텍스트 분석 방법을 확인할 수 있습니다. com 번 전에 끝나는 이메일 ID는 nraheem, dbtech1, com으로 분석됩니다. 다음 쿼리를 사용하여 tokens을 확인하십시오.

curl -XGET 'localhost:9200/_analyze' -d ' 
{ 
"analyzer" : "standard", 
"text" : "[email protected]" 
}' 

당신이 생성되는 별도의 용어 com이 볼 수 있듯이. [email protected]을 분석하면 tokenskumar, gmail.com과 같은 형태로 표시됩니다. 이 경우 별도의 토큰 com이 생성되지 않습니다.

@,? 등 또는 번호도 같은 일부 특수 문자가 발생하면 Standard Analyzer이 조건을 분할하기 때문이다. 귀하의 요구 사항을 충족시키기 위해 custom Analyzer을 생성 할 수 있습니다.

희망이 도움이됩니다!

관련 문제