elasticsearch는 병음을 검색하고 내용을 강조합니다.

5560 단어 elasticsearch
es 병음 플러그인https://github.com/medcl/elasticsearch-analysis-pinyin/tree/v1.6.0, 구체적인 용법은 여기에 소개하지 않습니다.readme 보기
현재 경기장을 수색하는 기능을 실현하려면 경기장 명칭의 자모 줄임말에 따라 경기장을 수색할 수 있고 첫 번째 맞춤법에 대응하는 한자 부분을 강조해야 한다.
분석은 다음과 같이 정의할 수 있습니다.
    "analysis": {
      "tokenizer": {
        "my_pinyin" : {
            "type" : "pinyin",
            "first_letter" : "only"
        }
      },
      "filter": {
        "pinyin_filter" : {
            "type" : "pinyin",
            "first_letter" : "only",
            "padding_char" : ""
        }
      },
      "analyzer": {
        "pinyin_analyzer" : {
          "tokenizer" : "ansj_query_token",
          "filter" : "pinyin_filter"
          },
        "pinyin_all_analyzer" : {
          "tokenizer" : "my_pinyin",
          "filter" : "word_delimiter"
          },
        "index_ansj": {
           "type": "custom",
           "tokenizer": "ansj_index_token"
        },
        "query_ansj": {
           "type": "custom",
           "tokenizer": "ansj_query_token"
        }
      }
    }
분사 부분은 ansj분사를 사용합니다.
경기장 매핑은 다음과 같다.
{
  "properties": {
    "name": {
      "type": "string",
      "term_vector" : "with_positions_offsets",
      "index_analyzer": "index_ansj",
      "search_analyzer": "query_ansj",
      "fields": {
        "pinyin": {
          "type": "string",
          "index_analyzer": "pinyin_analyzer",
          "search_analyzer": "query_ansj"
        }
      }
    },
    "address": {
      "type": "string",
      "term_vector" : "with_positions_offsets",
      "index_analyzer": "index_ansj",
      "search_analyzer": "query_ansj"
    },
    "createTime" : {
      "type": "date",
       "format": "yyy-MM-dd HH:mm:ss"
    }
  }
}
name 필드에서 사용하는 multi_fields 필드,name 인덱스를 만드는 동시에name를 만듭니다.pinyin 인덱스.
쿼리를 검색하면 다음과 같이 쓸 수 있습니다.
{
    "_source": ["createTime"], 
    "query": {
          "multi_match": {
              "type": "most_fields",
              "query": "cs",
              "fields": ["name", "name.pinyin","address"],
              "minimum_should_match": "-20%"
            }

        },
      "sort": [
        {"createTime":{"order":"desc"}}
      ],
    "highlight": {
      "boundary_chars":".,!? \t
,。!?", "pre_tags" : [""], "post_tags" : [""], "fields": { "name" : { "number_of_fragments" : 0 }, "name.pinyin" : { "number_of_fragments" : 0 }, "address" : { "number_of_fragments" : 0 } } } }

예를 들어 시험장이라는 장소가 있다면'cs'를 입력해서 검색할 때도 이 장소를 검색할 수 있다.그리고 경기장 이름을 밝게 표시할 수 있습니다. 차이점은 첫 번째 항목을 입력하면 밝은값은name에 있습니다.pinyin에 한자를 입력하면 하이라이트는name,name,name입니다.pinyin 하이라이트 출력의 내용은 같습니다.
{
   "took": 5,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 3,
      "max_score": null,
      "hits": [
         {
            "_index": "huiti_app_v1",
            "_type": "stadium",
            "_id": "id1",
            "_score": null,
            "_source": {
               "createTime": "2015-01-01 00:00:00"
            },
            "highlight": {
               "name.pinyin": [
                  "  1"
               ]
            },
            "sort": [
               1420070400000
            ]
         },
         {
            "_index": "huiti_app_v1",
            "_type": "stadium",
            "_id": "id2",
            "_score": null,
            "_source": {
               "createTime": "2015-01-01 00:00:00"
            },
            "highlight": {
               "name.pinyin": [
                  "  2"
               ]
            },
            "sort": [
               1420070400000
            ]
         },
         {
            "_index": "huiti_app_v1",
            "_type": "stadium",
            "_id": "id3",
            "_score": null,
            "_source": {
               "createTime": "2015-01-01 00:00:00"
            },
            "highlight": {
               "name.pinyin": [
                  "  3"
               ]
            },
            "sort": [
               1420070400000
            ]
         }
      ]
   }
}

좋은 웹페이지 즐겨찾기