elasticsearch三层关系最终版
2019-08-06 本文已影响0人
陈文瑜
三层关系编码
- 设置setting
PUT last_tree_index { "settings": { "analysis": { "filter": { # filter过滤器设置 "edge_ngram_filter":{ "type":"edge_ngram", "min_gram":1, "max_gram":50 }, "pinyin_simple_filter":{ "type":"pinyin", "keep_first_letter":true, "keep_separate_first_letter":false, "keep_full_pinyin":false, "keep_original":false, "limit_first_letter_length":50, "lowercase":true }, "pinyin_full_filter":{ "type":"pinyin", "keep_first_letter":false, "keep_separate_first_letter":false, "keep_full_pinyin":true, "none_chinese_pinyin_tokenize":true, "keep_original":false, "limit_first_letter_length":50, "lowercase":true } }, "tokenizer": { # tokenizer 分词器设置 "ik_max_word":{ "type":"ik_max_word", "use_smart":true } }, "analyzer": { #analyzer 分析器设置 "ngramIndexAnalyzer":{ "type":"custom", "tokenizer":"keyword", "filter":[ "edge_ngram_filter", "lowercase" ] }, "ikIndexAnalyzer":{ "type":"custom", "tokenizer":"ik_max_word" }, "pinyiSimpleIndexAnalyzer":{ "tokenizer":"keyword", "filter":[ "pinyin_simple_filter", "edge_ngram_filter", "lowercase" ] }, "pinyiFullIndexAnalyzer":{ "tokenizer":"keyword", "filter":[ "pinyin_full_filter", "lowercase" ] } } } } }
- 设置mapping
PUT last_tree_index/_mapping/_doc { "properties":{ "my_join_field":{ "type":"join", "relations":{ "question":"answer", "answer":"vote" } }, "fullText":{ "type":"text", "analyzer":"ikIndexAnalyzer", "fields":{ "ngram":{ "type":"text", "analyzer":"ngramIndexAnalyzer" }, "SPY":{ "type":"text", "analyzer":"pinyiSimpleIndexAnalyzer" }, "FPY":{ "type":"text", "analyzer":"pinyiFullIndexAnalyzer" } } } } }
- 插入数据
PUT last_tree_index/_doc/1?refresh { "fullText":"这是一个问题", "my_join_field":"question" } PUT last_tree_index/_doc/2?refresh { "fullText":"这是另外一个问题", "my_join_field":"question" } PUT last_tree_index/_doc/3?routing=1&refresh { "fullText":"这是一个答案", "my_join_field":{ "name":"answer", "parent":"1" } } PUT last_tree_index/_doc/4?routing=2&refresh { "fullText":"这是另外一个答案", "my_join_field":{ "name":"answer", "parent":"2" } } PUT last_tree_index/_doc/5?routing=1&refresh { "fullText":"这是一个赞同", "my_join_field":{ "name":"vote", "parent":"3" } } PUT last_tree_index/_doc/6?routing=2&refresh { "fullText":"这是另外一个赞同", "my_join_field":{ "name":"vote", "parent":"4" } }
- 最终简单查询语句
GET last_tree_index/_search { "query": { "bool": { "should": [ { "match": { "fullText.ngram": { "query": "这是问题", "boost": 5 } } }, { "match": { "fullText.SPY": { "query": "zswt", "boost": 1 } } }, { "match": { "fullText.FPY": { "query": "zheshiwenti", "boost": 0.8 } } } ], "must": [ { "has_child": { "type": "answer", "query": { "has_child": { "type": "vote", "query": { "bool": { "should": [ { "term": { "fullText": "这是" } } ] } } } }, "inner_hits": {} } } ] } } }
- 多字段匹配改写
GET last_tree_index/_search { "query": { "bool": { "should": [ { "multi_match": { "query": "这是问题", "fields": ["fullText^10","fullText.ngram^5","fullText.SPY^1","fullText.FPY^0.8"] } } ], "must": [ { "has_child": { "type": "answer", "query": { "has_child": { "type": "vote", "query": { "bool": { "should": [ { "term": { "fullText": "这是" } } ] } } } }, "inner_hits": {} } } ] } } }