2017-05-03 5 views
0

우리는 탄성 검색에서 구문을 일치시키려는 유스 케이스를 가지고 있지만, 구문 쿼리 이외에 부분 구문도 검색하려고합니다.탄성 검색에서 확장 가능한 접두사와 접미사를 사용하여 구문을 일치시키는 방법은 무엇입니까?

예 :

검색 구문 :이 문서에 포함 된 문구에 일치해야합니다 "요 lcome" "당신을 환영합니다"또는 "당신을 lcome"또는 "요 환영"또는 :

"당신을 환영합니다"

는 "당신이 오신 것을 환영합니다"

"우리는 당신을 환영합니다" "우리는 환영 당신에게"

즉, 구문을 부분 부분 문자열로 사용하고 접두어와 접미사를 특정 구성 가능한 길이로 확장하여 결과를 반환하는 추가 된 기능으로 구문 쿼리를 수행하여 단어의 순서를 유지하려고합니다. 탄성 있음 나는 'match_phrase_prefix'와 비슷한 것을 발견했지만 특정 접두어로 시작하는 구와 일치합니다.

예 반환 결과 D 접두어로 시작 :

$ curl -XGET localhost:9200/startswith/test/_search?pretty -d '{ 
    "query": { 
     "match_phrase_prefix": { 
      "title": { 
       "query": "d", 
       "max_expansions": 5 
      } 
     } 
    } 
}' 

는 나뿐만 아니라 접미사이 달성 할 수있는 방법이 있습니까?

답변

1

shingle token filter을 살펴 보시기 바랍니다.

토큰 자체와 함께 일련의 후속 토큰을 색인화하기 위해 대상 포진을 활용하는 사용자 정의 분석기로 색인을 정의 할 수 있습니다. 예를 들어

curl -XPUT localhost:9200/startswith -d '{ 
    "settings": { 
     "analysis": { 
     "analyzer": { 
      "my_shingles": { 
      "tokenizer": "standard", 
      "filter": [ 
       "lowercase", 
       "shingles" 
      ] 
      } 
     }, 
     "filter": { 
      "shingles": { 
      "type": "shingle", 
      "min_shingle_size": 2, 
      "max_shingle_size": 2, 
      "output_unigrams": true 
      } 
     } 
     } 
    }, 
    "mappings": { 
    "test": { 
     "properties": { 
     "title": { 
      "type": "text", 
      "analyzer": "my_shingles" 
     } 
     } 
    } 
    } 
}' 

, we welcome you to는 다음의 토큰

  • we
  • we welcome
  • welcome
  • welcome you
  • you
  • 로 인덱싱 될 것이다 6,
  • you to
  • to

은 그럼 당신은 인덱스 몇 가지 샘플 문서 수 : 마지막으로

curl -XPUT localhost:9200/startswith/test/_bulk -d ' 
{"index": {}} 
{"title": "welcome you"} 
{"index": {}} 
{"title": "we welcome you"} 
{"index": {}} 
{"title": "welcome you to"} 
{"index": {}} 
{"title": "we welcome you to"} 
' 

, 당신은 다음과 같이 위의 네 가지 문서를 일치하도록 다음 쿼리를 실행할 수 있습니다

curl -XPOST localhost:9200/startswith/test/_search -d '{ 
    "query": { 
     "match": {"title": "welcome you"} 
    } 
}' 

이 방법은보다 강력합니다.쿼리를 사용하면 처음부터 끝까지 텍스트의 본문에있는 후속 토큰을 일치시킬 수 있습니다.

+0

그러나이 솔루션은 "환영"이라는 부분 문자열 인 "lcome"토큰을 찾지 않기 때문에 "lcome you"와 같은 것을 검색 할 때 사례를 처리하지 않습니다. – user2530619

+1

죄송 합니다만 부분 일치가 필요하다는 것도 분명하지 않았습니다. 'ngram' 토큰 필터를 사용하여 솔루션을 향상 시키려고 시도 할 수 있습니다. – Val