投资菜地

屋后的一亩三分绿色菜园地

2020-05-21

站内搜索

站内搜索

概述

搜索引擎的主要组成部分:文档获取、文档存储(索引、压缩)、文档查询(拼写建议、排序算法、评估。

  • 文档获取最重要的是去重。
  • 索引系统使用倒排,涉及到不同语言的分词。

使用elastic search 实现公司内部资源的全文检索

需求:

常见的需求,通过关键词搜索需要的文章

在简单搜索的基础上提供类型,来源的过滤

  • 类型type - 对每条信息的分类

  • 标题title - 搜索时的显示

  • 摘要summary - 搜索时的摘要

  • 内容content - 不显示但作为优先级不高的搜索条件

  • 时间datetime - 记录信息收录时间

  • 链接url - 方便查看详细

  • 数据源source - 方便查看详细

后续还可以增加优先级比较高的字段精准查询

接口

查询

地址:GET /search/?q=keywords&type=t1,t2&source=s1,s2&page=1&size=10

name type remark
q text 需要查询的内容
page int 起始页,从1开始,默认第一页
size int 每次查询的条数,默认10条
type text 文档类型,多个文档类型使用逗号分隔
source text 文档来源,多个来源使用逗号分隔

元数据查询

文档类型查询:GET /types

文档来源查询:GET /sources

数据导入

POST /import

创建应用

创建一个新的索引 put /sources

{
  "settings": {
    "analysis": {
      "analyzer": {
        "pinyin_analyzer": {
          "tokenizer": "pinyin_default",
          "filter": [
            "lowercase",
            "english_stop"
          ]
        },
        "english_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "english_stop"
          ]
        }
      },
      "filter": {
        "english_stop": {
          "type": "stop",
          "stopwords": "_english_"
        }
      },
      "tokenizer": {
        "pinyin_default": {
          "type": "pinyin",
          "keep_separate_first_letter": false,
          "keep_full_pinyin": true,
          "keep_original": true,
          "limit_first_letter_length": 16,
          "lowercase": true,
          "remove_duplicated_term": true
        },
        "ik_smart": {
          "type": "ik_smart",
          "use_smart": true
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "type": {
        "type": "keyword"
      },
      "title": {
        "type": "text",
        "fields": {
          "english": {
            "type": "text",
            "analyzer": "english_analyzer"
          },
          "pinyin": {
            "type": "text",
            "analyzer": "pinyin_analyzer"
          }
        }
      },
      "summary": {
        "type": "text",
        "fields": {
          "english": {
            "type": "text",
            "analyzer": "english_analyzer"
          },
          "pinyin": {
            "type": "text",
            "analyzer": "pinyin_analyzer"
          }
        }
      },
      "content": {
        "type": "text",
        "fields": {
          "english": {
            "type": "text",
            "analyzer": "english_analyzer"
          },
          "pinyin": {
            "type": "text",
            "term_vector": "with_offsets",
            "analyzer": "pinyin_analyzer",
            "boost": 10
          }
        }
      },
      "datetime": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
      "url": {
        "type": "keyword"
      },
      "source": {
        "type": "keyword"
      }
    }
  }
}

或删除

开源项目(更多)