elasticsearch中的mapping映射配置與查詢典型案例

elasticsearch中的mapping映射配置示例
好比要搭建箇中文新聞信息的搜索引擎,新聞有"標題"、"內容"、"做者"、"類型"、"發佈時間"這五個字段;
咱們要提供"標題和內容的檢索"、"排序"、"高亮"、"統計"、"過濾"等一些基本功能。
ES提供了smartcn的中文分詞插件,測試的話建議使用IK分詞插件。
內容中properties對應mapping裏的內容,裏面5個字段。
type指出字段類型、內容、標題字段要進行分詞和高亮所以要設置分詞器和開啓term_vector。
{
  "news": {
    "properties": {
      "content": {#內容
        "type": "string",  #字段類型
        "store": "no", #是否存儲
        "term_vector": "with_positions_offsets",#開啓向量,用於高亮
        "index_analyzer": "ik",#索引時分詞器
        "search_analyzer": "ik"#搜索時分詞器
      },
      "title": {
        "type": "string",
        "store": "no",
        "term_vector": "with_positions_offsets",
        "index_analyzer": "ik",
        "search_analyzer": "ik",
        "boost": 5
      },
      "author": {
        "type": "string",
        "index": "not_analyzed"#該字段不分詞
      },
      "publish_date": {
        "type": "date",
        "format": "yyyy/MM/dd",
        "index": "not_analyzed"#該字段不分詞
      },
      "category": {
        "type": "string",
        "index": "not_analyzed"#該字段不分詞
      }
    }
  }
}

查詢示例:內容包括幾個部分:

分頁:from/size、字段:fields、排序sort、查詢:query、過濾:filter、高亮:highlight、統計:facet
{
  "from": 0,
  "size": 10,
  "fields": [
    "title",
    "content",
    "publish_date",
    "category",
    "author"
  ],
  "sort": [
    {
      "publish_date": {
        "order": "asc"
      }
    },
    "_score"
  ],
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "title": "中國"
          }
        },
        {
          "term": {
            "content": "中國"
          }
        }
      ]
    }
  },
  "filter": {
    "range": {
      "publish_date": {
        "from": "2010/07/01",
        "to": "2010/07/21",
        "include_lower": true,
        "include_upper": false
      }
    }
  },
  "highlight": {
    "pre_tags": [
      "<tag1>",
      "<tag2>"
    ],
    "post_tags": [
      "</tag1>",
      "</tag2>"
    ],
    "fields": {
      "title": {},
      "content": {}
    }
  },
  "facets": {
    "cate": {
      "terms": {
        "field": "category"
      }
    }
  }
}
結果包含須要的幾個部分。
值得注意的是,facet的統計是命中的結果進行統計,filter是對結果進行過濾,filter不會影響facet,若是要統計filter掉的的就要使用filter facet。app

相關文章
相關標籤/搜索