본문 바로가기
웹/elasticsearch

elasticsearch 에 없는 기능 - return terms

by java개발자 2019. 4. 26.

elasticsearch(es) 에 없는 기능이 있다. (7.0.0 기준)

 

es는 full text 검색이 가능하다.

입력: 검색 keyword

출력: 검색 keyword가 포함된 full text 리스트

끝.

 

검색이 되는 건 좋으나 검색 결과로 full text를 포함한 리스트가 포함된다. (문서의 리스트)

난, 그 검색 keyword가 full text 중에서 어느 위치에 있는지 알고 싶은데, 그 위치는 알려주지 않는다. 충분히 가능한데 말이다.

 

예를 들어 다음의 데이터(문장)와 검색어가 있을 경우

데이터: solr in action, but elasticsearch in action, solr in action

검색어: solr in

결과는 그저 문장 전체가 다시 출력된다. (당연히 검색어를 포함하고 있으므로)

물론 highlight를 이용하면 

<em>solr</em> <em>in</em> action, but elasticsearch in action, <em>solr</em> <em>in</em> action으로 만들어서 return 해 주기는 한다.

그럼 난, 위치를 찾기 위해 이 문장에서 tag를 찾아 다시 파싱해야 한다. 왜 그래야 하나..... -_-;; 두번 작업하는 일이 된다.

 

해결

이러한 이슈는 이미 2017년도에 거론이 되었고, 커뮤니티에 해결책이 나왔다.

논의: https://discuss.elastic.co/t/fetching-position-of-keyword-in-matched-document/94291/5

 

Fetching position of keyword in matched document

Thank Mark for mentioning the plugin. I'm going to try it. Btw, I found this issue https://github.com/elastic/elasticsearch/issues/5736, still open for more than 3 years, hope next releases will implement this helpful feature.

discuss.elastic.co

해결책: 다른 plugin을 사용하자.

https://github.com/wikimedia/search-highlighter

 

wikimedia/search-highlighter

Github mirror of "search/highlighter" - our actual code is hosted with Gerrit (please see https://www.mediawiki.org/wiki/Developer_access for contributing - wikimedia/search-highlighter

github.com

es에서는 plugin으로 기존 기능을 덮어쓸 수 있다.

설치방법(mac)::

bin> ./elasticsearch-plugin install org.wikimedia.search.highlighter:experimental-highlighter-elasticsearch-plugin:6.5.4 

현재 maven 페이지에 들어가보니 6.5.4가 최신이었다. 그리고, 6.5.4를 사용하기 위해서 es도 6.5.4로 버전이 같아야 한다.

https://mvnrepository.com/artifact/org.wikimedia.search.highlighter/experimental-highlighter-elasticsearch-plugin

 

Maven Repository: org.wikimedia.search.highlighter » experimental-highlighter-elasticsearch-plugin

Experimental Highlighter plugin VersionRepositoryUsagesDate6.5.x6.5.4Central 0 Feb, 20196.3.x6.3.1.2Central 0 Aug, 20186.3.1.1Central 0 Jul, 20186.3.1Central 0 Jul, 20186.3.0Central 0 Jul, 20185.6.x5.6.14Central 0 Feb, 20195.5.x5.5.2.4Central 0 Nov, 20185.

mvnrepository.com

그리고 다음의 query를 실행하면,

...더보기

GET /bookdb_index/book/_search
{
  "_source": ["title"],
  "query" : {
      "match_phrase" : { "title" : "solr in action solr" }
  },
  "highlight" : {
   "pre_tags" : [""],
      "post_tags" : ["
"],
      "fields" : {
          "title" : {
           "fragment_size" : 30, 
           "number_of_fragments" : 10, 
           "type": "experimental",
           "options": {"return_offsets": true}
          }
      },
      "order" : "score"
  }
}

결과

...더보기

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 2.6149776,
    "hits": [
      {
        "_index": "bookdb_index",
        "_type": "book",
        "_id": "5",
        "_score": 2.6149776,
        "_source": {
          "title": "Solr in Action Solr in Action"
        },
        "highlight": {
          "title": [
            "0:0-4,5-7,8-14,15-19:29"
          ]
        }
      }
    ]
  }
}

"0:0-4,5-7,8-14,15-19:29" 를 얻을 수 있다.

' > elasticsearch' 카테고리의 다른 글

openkoreantext_analyzer start_offset bug  (0) 2019.10.09
한글 형태소 분석기 비교  (0) 2019.07.05
test query  (0) 2019.04.26