CloverSearch搜索引擎的Django模块,使用起来超级方便!。版本[0.1.20]更新内容:优化建立索引、搜索性能,测试性能提高10倍以上,但是受限于Python语言的性能,数据量大的时候性能还是不够理想,有待进一步优化。
Project description
CloverSearch全文检索框架
简介
之前试过HayStack+Whoosh的方案,但是配置麻烦,而且对于接口调用的支持也不友好, 看了一下文档看得云里雾里,索性自己实现一个全文检索功能,其实也不复杂。
基本逻辑
- 构建索引
- 运行创建model索引配置文件
- 配置哪些model需要加入索引
- 运行创建字段索引配置文件
- 配置哪些model的字段需要加入索引
- 运行构建索引
- 初始化索引
- 提交搜索请求
- 获取搜索结果
Quick Start
1. 首先在Django项目的环境中安装cloversearch
pip install cloversearch
2. 编辑Django的setings.py
文件:
将cloversearch
加入INSTALLED_APPS
# 加入INSTALLED_APPS
INSTALLED_APPS = [
'cloversearch'
]
添加cloversearch
的基本配置:
详细配置请看下方的配置说明
CLOVER_SEARCH = {
# 需要索引的App列表,必填
'APP_LIST': [''],
# 存放配置的目录,必填
'CONFIG_DIR': '',
# 索引数据保存目录,必填
'INDEX_DIR': '',
}
3. 扫描model
与建立索引
注意!首次使用搜索引擎时以下命令的执行顺序不可以颠倒,一定要创建配置,并且配置了需要加入检索的字段后才可以建立索引。
# 扫描所有model,并且创建model配置
python manage.py scan_models
执行该命令后会在CONFIG_DIR
里配置的路径里生成models_config.ini
文件,内容类似下面这样:
请在models_config
配置文件里设置需要开启索引的model
[app_name]
model1 = true
model2 = true
model3 = false
接下来扫描开启了索引功能的model
里包含的字段:
# 扫描所有开启索引功能model里的字段,并且创建field配置
python manage.py scan_fields
执行该命令后会在CONFIG_DIR
里配置的路径里生成[app_name]_fields_config.ini
文件
目前cloversearch
只扫描CharField
和TextField
类型的字段
[app_name]
对应具体的app
名称,文件内容类似下面这样:
[model_name]
field1 = true
field2 = true
field3 = true
field4 = false
配置完成之后就可以执行以下命令建立搜索引擎的索引了,建立索引的时间视数据量大小而定
# 建立索引
python manage.py build_index
4. 搜索接口调用
from cloversearch.query import SearchQuery
result = SearchQuery.query('搜索关键词')
SearchQuery.query()
方法返回一个SearchResultSet
对象,有关SearchResultSet
的简单用法如下:
from cloversearch.query import SearchQuery
result = SearchQuery.query('搜索关键词')
# 返回 SearchResultObject 类型的 list
result_list = result.all
for item in result_list:
# 输出序列化的搜索结果对象
print(item.__dict__)
文件结构
配置文件
models_index_config.ini
: model索引配置文件fields_index_config.ini
: 字段索引配置文件search
: 检索框架目录index
: 索引数据目录{ModelName}/{PrimaryKey}
: 索引数据clean_data.json
: 经过字符过滤后的数据keywords.json
: 关键词数据
代码结构
config.py
: 框架配置管理器,用于解析Django配置encoder.py': 用于处理
SearchQueryObject的
JsonEncoder`index_builder.py
: 索引构建相关create_model_config()
: 创建model索引配置文件create_field_config()
: 创建字段索引配置文件build()
: 构建索引
indexes.py
: 索引操作相关class Index
: 索引类,一个Index对应的就是数据库表里的一行class IndexManager
: 用于关于索引的类,单例模式
processer.py
: 文本处理word_segment()
: 分词处理character_filter()
: 字符过滤器
query.py
: 搜索请求处理class SearchQueryObject
: 搜索结果对象class SearchQuerySet
: 搜索结果集class SearchQuery
: 搜索处理核心类
Django配置
CloverSearch Config
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
CLOVER_SEARCH = {
# 需要索引的App列表,必填
'APP_LIST': [''],
# 存放配置的目录,必填
'CONFIG_DIR': os.path.join(BASE_DIR, 'static', 'search', 'config'),
# 索引数据保存目录,必填
'INDEX_DIR': os.path.join(BASE_DIR, 'static', 'search', 'index'),
# Logger名称
'LOGGER_NAME': 'console',
# 文件默认编码
'DEFAULT_FILE_ENCODING': 'utf-8',
# 默认的model索引配置 (str)
'DEFAULT_MODEL_INDEX_ENABLED_STATE': 'true',
# 默认的字段索引配置 (str)
'DEFAULT_FIELD_INDEX_ENABLED_STATE': 'true',
# Model索引配置文件名
'MODEL_INDEX_CONFIG_FILENAME': 'models_config.ini',
# 字段索引配置文件名后缀,配置需要搜索引擎索引指定model的哪些字段
'FIELD_CONFIG_FILENAME_SUFFIX': '_fields_config.ini',
# 支持的数据库字段类型
'SUPPORT_FIELDS_TYPE': ['CharField', 'TextField']
}
Logging 日志配置
注意:配置了名为
console
的logger才可以看到索引构建过程或者搜索详细过程的输出。
import os
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s] %(message)s'}
# 日志格式
},
'filters': {
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
},
'loggers': {
'console': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True
},
}
}
manage.py 命令
注意!首次使用搜索引擎时顺序不可以颠倒,一定要创建配置,并且配置了需要加入检索的字段后才可以建立索引。
# 扫描所有model,并且创建model配置
python manage.py scan_models
# 扫描所有开启索引功能model里的字段,并且创建field配置
python manage.py scan_fields
# 建立索引
python manage.py build_index
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file cloversearch-0.1.20.tar.gz
.
File metadata
- Download URL: cloversearch-0.1.20.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.9.1 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6bfc73c37c089ffc2475aab8fb746083630d1ae834e3cfe8d33bc19210319a05 |
|
MD5 | 58bc74660b17c2b4cc5021fbbfe03e0b |
|
BLAKE2b-256 | 2879f062b7f005e5360b8530e9efd05dddabe0f082ec46713f18173814d3b2cb |
File details
Details for the file cloversearch-0.1.20-py3-none-any.whl
.
File metadata
- Download URL: cloversearch-0.1.20-py3-none-any.whl
- Upload date:
- Size: 29.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.9.1 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2f7a2be3da4580cab34fc5f6e2403e0f56f9d7a90558dcc4af52bb18c0ce4ff |
|
MD5 | cebbddccf513e79f7a2afc8482c2bba6 |
|
BLAKE2b-256 | a2bf642d456647be678914217ed2d067843b7241ea07c90e58e447712209722e |