Elasticsearch의 NGram 분사기 처리 모호 일치

9191 단어 elasticsearch
Elasticsearch로 은행 지점 이름을 검색하는 기능을 수행합니다.대개 사용자가 지점 이름이나 병음 자모를 입력하여 해당하는 지점 이름을 되돌려줍니다.예를 들어 사용자가'공업은행'이나'gh'를 입력하면'공업은행 XX지점'과 같은 결과를 되돌려야 합니다.
나는 마음속으로 중얼거렸다. 데이터베이스는 어댑터 조회를 지원하지 않습니까?왜 데이터베이스로 직접 조회하지 않습니까?
말하자면 그래도 임무는 완수해야 한다.이전에 인터넷에서 한 문장을 보았는데 주로 Elasticsearch로 어댑터 조회를 처리하는 것이 적합하지 않다는 것이다. 그리고 나는 평론에서 작가가 분사기 NGram을 추천하는 것을 보았다.
이 분사기는 어댑터 조회를 일반적인 조회와 같이 신속하게 할 수 있다. 왜냐하면 이 분사기는 데이터 인덱스 단계에서 모든 일을 끝냈기 때문이다.
An n-gram can be best thought of as a moving window on a word. The n stands for a length. If we were to n-gram the word quick, the results would depend on the length we have chosen:
Length 1(unigram): [q, u, i, c, k] Length 2(bigram): [qu, ui, ic, ck] Length 3(trigram): [qui, uic, ick] Length 4(four-gram): [quic, uick] Length 5(five-gram): [quick] NGram 분사기를 어떤 필드의 분사기로 사용하려면 색인을 만들 때 지정할 수도 있고 맵 관계를 업데이트할 수도 있습니다.
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ngram_analyzer": {
          "tokenizer": "ngram_tokenizer"
        }
      },
      "tokenizer": {
        "ngram_tokenizer": {
          "type": "ngram",
          "min_gram": 1,
          "max_gram": 30,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  },
  "mappings": {
        "_default_": {
            "properties": {
                "Name": {
                    "type": "string",
                    "analyzer": "ngram_analyzer"
                }
            }
        }
    }
}

어떤 필드의 analyzer가ngram_로 지정되면analyzer, 이 필드의 검색은term이든 match든 어댑터 검색이 됩니다.
예를 들어, POST/index/type
{
    "query": {
        "term": {"Name": " "}
    }
}

중국공상은행 XX지점을 받게 됩니다.
예를 들어, POST/index/type
{
    "query": {
        "match": {"Name": " "}
    }
}

'중국공상은행 XX지점','공은행 XX지점','중국상업유치은행 XX지점'을 받을 수 있습니다.
match 조회는 키워드에 대해 단어를 나누고, Lucene의 기본 중국어 단어는 모든 중문자를 분리하는 것이다. 이렇게 하면'공','상'두 글자에 대한 어댑터 조회가 된다.
작성자:
링크:https://www.imooc.com/article/18578?block_id=tuijian_wz
모과망

좋은 웹페이지 즐겨찾기