2016-12-06 7 views
1

나는 탄력 서버에 텍스트 색인을 가지고 있습니다. 나는이 같은 N- 그램 토크 나이를 구현 한 :검색 패턴의 최소 문자 이상 ngram을 사용하여 텍스트 내에서 검색

"analysis": { 
     "analyzer": { 
     "ngram_analyzer": { 
      "type": "custom", 
      "tokenizer": "ngram_tokenizer" 
     } 
     }, 
     "tokenizer": { 
     "ngram_tokenizer": { 
      "type": "ngram", 
      "min_gram": "3", 
      "max_gram": "7" 
     } 
     } 
    }, 

내가 검색어 검색 "지옥" 을 배치 할 때

"안녕하세요 아름다운 세상 해주세요"

I가 원하는 내 데이터가 말할 수 있습니다 나만 첫 단어 (안녕하세요)와 ell이라는 단어가 아니라는 것을 알기 때문에 내 검색 패턴을 "깨뜨려"내 데이터에서 찾을 수 있습니다. (4 명의 charecters가 있고 아래가 아님)

감사합니다.

+0

안녕하세요는 "Hel, ell, llo, Hell, ello, Hello"로 토큰 화되며 "ell"로 표시되고 검색 할 때 여전히 하나의 결과 만 표시됩니다. 전체 문자열입니다. -> "안녕 아름다운 세상". 문장을 나열하고 하나는 "안녕하세요 아름다운 세상"이고 다른 하나는 "아름다운 세계 ell"이고, "엘"을 검색하면 토크 메이커에서 색인을 생성 한 방법이므로 둘 다 가져올 수 있습니다. – mirzak

+0

나는 너와 동의하지만 지옥을 찾고 있었는데 나는 지옥이라는 단어를 얻고 싶다. (나는 그것을 찾지 못했기 때문에 글자 수가 적고 H가 없다.) –

+0

왜 이해가 안되는가? 수색자가 Hel, ell, hell로 단어를 깨고 Heel을 검색하는 것뿐입니다. –

답변

1

해결책은 분석기에서 토크 나이저를 변경하는 것입니다.

는 예를 들어, 당신은 그것이 중요

"some_analyzer": { 
    "type": "custom", 
    "tokenizer": "whitespace", 
    "filter": [ "lowercase" ] 
    } 

가 검색 분석기는 N- 그램 토크 나이를하지 않는다는 것입니다 좋아 할 수 있습니다.

+0

고맙지만, 공백이있는 토큰 화가는 "Hello beautiful world ell"이라는 텍스트가 있고 "지옥"을 검색하는 것처럼 부분 구문을 검색 할 수 없다고 생각합니다. 내가 기대하는 것처럼 첫 단어에서 찾지 못할 것입니다. , 아니? –

+0

방금 ​​이런 식으로 시도했습니다. 나는 "안녕하세요 아름다운 세계 엘"을 색인하고 "지옥"을 찾아 보았습니다 -> "안녕하세요"에서 한 번 성공했습니다. 이것은 nGram 토크 나이저 (3 - 30)를 사용하기 때문입니다. Hello는 다음과 같이 토큰 화됩니다. "Hel, ell, llo, Hell, ello, Hello"및 "ell"은 "ell"입니다. 그리고 검색 분석기 tokenizer는 공백에 검색 문자열을 나눌 것을 의미하는 "공백"입니다. 제 경우에는 그냥 "지옥"이후로 헤어지지 않을 것입니다. 그리고 "지옥"이 용어의 하나로 색인되어 있기 때문에 그것을 발견 할 수있었습니다. 용어에 대한 자세한 내용 : https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html – mirzak

+0

대단히 감사합니다. 정확히 내가 한 일로이 문제가 해결되었습니다! 고맙습니다. 새로운 문제가 생겼습니다. 하이라이트를 사용하고 있습니다. 사실 나는 지옥을 검색하고 있기 때문에 어떤 이유로 든 안녕하세요. 안녕하세요. –