django的algolia搜索集成

algoliasearch-django的Python项目详细描述



Algolia Search API Client for Django

[Algolia Search](https://www.algolia.com)是一个托管搜索引擎,能够在第一次按键时提供实时结果。

[![构建状态](https://travis-ci.org/algolia/algoliasearch-django.svg?branch=master)(https://travis ci.org/algolia/algoliasearch django)
[![覆盖状态](https://coveralls.io/repos/algolia/algoliasearch-django/badge.svg?branch=master)(https://coveralls.io/r/algolia/algoliasearch django)
[![PYPI版本](https://badge.fury.io/py/algoliasearch-django.svg?branch=master)"(http://badge.fury.io/py/algolia search-django)




此包允许您轻松地将algolia搜索api集成到您的[django]项目(https://www.django project.com/)中。它基于[algolia search client python]包(https://github.com/algolia/algoliasearch-client-python)。

[algoliasearch django示例](https://github.com/algolia/algoliasearch django示例)

与**python 2.7兼容**,**python 3.4+**和**django 1.7+**





\api文档


您可以在[algolia的网站](https://www.algolia.com/doc/framework integration/django/)上找到完整的参考资料。




1。**[安装](安装)**
*[简介](简介)
*[安装](安装)
*[安装](安装)
*[快速启动](快速启动)


1。**[命令](命令)**
*[命令](命令)

1。**[搜索](搜索)**
*[搜索](搜索)

1.**[地理搜索](地理搜索)**
*[地理搜索](地理搜索)

1.**[标签](标签)**
*[标签](标签)

1.**[选项](选项)**
*[自定义<;代码>;对象ID<;/代码>;](自定义代码对象代码)
*[自定义索引名称](自定义索引名称)
*[字段预处理和相关对象](字段预处理和相关对象)
*[索引设置](索引设置)
*[将索引限制为数据的子集](将索引限制为数据的子集)
*[每个模型有多个索引](每个模型有多个索引)
*[暂时禁用自动索引](暂时禁用自动索引)

1。**[测试](测试)**
*[运行测试](运行测试)






它基于[algolia search client python]包(https://github.com/algolia/algoliasearch-client-python)。

[algoliasearch django示例](https://github.com/algolia/algoliasearch django示例)

将"algoliasearch\u django"添加到"已安装的应用程序"中,并添加以下两个设置:

``python
algolia={
'application\u id':'myappid',
'api\u key':'myapikey'
}
````

有几个可选设置:

*`index\u prefix`:为所有索引添加前缀。使用它来分隔不同的应用程序,如"site1_products"和"site2_products"。
*"index_suffix":为所有索引添加后缀。使用它来区分开发和生产环境,如"location_dev"和"location_prod"。
*"auto_indexing":自动将模型与algolia同步(默认为**true**)。
*"raise_exceptions":在网络错误上引发异常,而不是记录它们(默认为**settings.debug**)。


\quick start

包含要索引的模型。
在此文件中,为每个要索引的模型调用"algoliasearch.register()":

`` python
index.py


>将algoliasearch导入为algoliasearch


from.models导入模型

algoliasearch.register(您的模型)
``

将使用模型的所有字段。您可以通过创建"algoliaindex"的子类并使用"register"装饰器来配置索引:

``python
index.py


from algoliasearch\u django import algoliaindex
from algoliasearch\u django.decorators import register

from.models importyourmodel

@寄存器(yourmodel)
类yourmodel索引(algoliaindex):
字段=("名称","日期")
地理字段="位置"
设置={searchableattributes':['name']}
索引名称="我的索引"

`````




此命令将首先将所有记录发送到临时索引,然后移动它。
*您可以传递`--model``参数来重新索引给定的模型
*`python manage.py algolia_apply settings`:(重新)应用索引设置。
*`python manage.py algolia_clear index`:清除索引




不需要通过服务器。

但是,如果要从后端搜索,可以使用"raw_search(yourmodel,'yourquery',params)"方法。
它从api检索原始json答案,并在"param"中接受任意
[搜索参数](https://www.algolia.com/doc/api reference/search api parameters/)。

`` python
来自algoliasearch_django import raw廑search

params={"hitsperpage":5}
response=raw廑search(contact,"jim",params)
```




` geo_field`应该是返回元组(纬度,经度)。fields='name'
geo_field='location'

````









tags

它可以是字段,也可以是可调用的。

``python
class articleindex(algoliaindex):
tags='category'
````

"tagvalue2"]}作为搜索参数,将结果集限制为特定的标记。





字段应该是唯一的,并且可以是字符串或整数。默认情况下,我们使用模型的"pk"字段。

``python
class articleindex(algoliaindex):
custom撸objectid='post撸id'
````

custom index name

默认情况下,索引名称将是模型类的名称。

`` python
类contact index(algoliaindex):
索引名称='企业'
```

字段预处理和相关对象

`名称"),
或者如果您想索引[相关对象](https://docs.djangoproject.com/en/1.11/ref/models/relations/)'
属性,您需要为这些字段定义**代理方法**。

=models.charfield(最大长度=40)
email=models.emailfield(最大长度=60)
/…
accounts=models.manytomanyfield(account)


def account_names(self):
return[str(account)for account in self.accounts.all()]

def account_id(self):
返回[self.accounts.all()中帐户的account.id]
```

``python
"邮政编码"、"电话"、"传真"、"网络"、"关注者"、"帐户名"、"帐户ID")


设置={
"可搜索属性":["名称"、"电子邮件"、"公司"、"城市"、"县"、"帐户名"、
}
````

-使用此配置,您可以使用"联系人"的"帐户"名称搜索"联系人"
-您可以在搜索时使用关联的"帐户"ID从
模型中获取更多数据(您应该**仅代理与搜索相关的字段**,以使记录的大小尽可能小)


设置

我们提供多种配置索引的方法,允许您调整索引的整体相关性。
所有配置都在[我们的文档](https://www.algolia.com/doc/api reference/api parameters/)中进行了说明。

`` python
类文章索引(algolia index):
设置={
"searchableattributes":["name","description","url"],
"customranking":["desc(vote_count)","asc(name)"
}
"customranking"``

"restrict indexing to a subset of your data

您可以添加约束,控制是否必须为记录编制索引。`索引应该是返回布尔值的可调用函数。

``python
class contact(models.model):
name=models.charfield(max_length=20)
age=models.integerfield()

def是成人(self):
return(self.age>;=18)

Class ContactIndex(AlgoliaIndex):
should嫒index='is嫒u成人'
````

为模型定义所需的所有索引:

``python
来自django.contrib.algoliasearch import algoliaindex


class mymodelindex1(algoliaindex):
name='mymodelindex1'


class mymodelindex2(algoliaindex):
name='mymodelindex2'

```

-然后,定义一个将聚合这些索引的元模型:

``python
class mymodelmetaindex(algoliaindex):
def初始(self,model,client,settings):
self.index=[
mymodelindex1(model,client,settings),
mymodelindex2(模型、客户端、设置),
]


def raw\u search(self,query='',params=none):
res={}
用于self中的索引。索引:
res[index.name]=index.raw\u search(query,params)
return res

def update\u记录(self,qs,批处理大小=1000,**kwargs):
用于自索引。索引:
索引。更新所有记录(qs,批处理大小,**kwargs)

批大小=1000):
用于自索引。索引:
索引。全部重新索引(批大小)


def set_settings(self):
用于自索引。索引:
索引。set_settings()

def clear_index(self):
用于自索引。索引:
index.clear_index()


def save_record(self,instance,update_fields=none,**kwargs):
索引在self中。索引:
index.save_record(instance,update_fields,**kwargs)


def delete_record(self,instance):
for index在self中。索引:
index.delete_record(instance)
````

-最后,将此"algoliaindex"注册到"model"中:

``python
import algoliasearch_django as algoliasearch
algoliasearch.register(mymodel,MyModelMetaIndex)
```

禁用自动索引

禁用自动索引(mymodel):
mymodel.save()
myothermodel.save()

````





首先找到Algolia应用程序ID和管理API密钥(可在凭据页上找到)。

`` shell
Algolia应用程序ID={应用程序ID}Algolia API密钥={管理API密钥}tox
```



使用[settings方法](https://docs.djangoproject.com/en/1.11/topics/testing/tools/django.test.simpleTestCase.settings):
``python
class overridesettingStestCase(testCase):
def setup(self):
使用self.settings(algolia={
"应用程序ID":"foo",
"API密钥":"bar",
"自动索引":false
}:
algolia_engine.reset(settings.algolia)

def teardown(self):
algolia_engine.reset(settings.algolia)


def test_foo():

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用McClickListener单击了什么元素   Java时间戳在Oracle时间戳中不同情况下存储12 PM的奇怪行为   java无法使用事件总线对运行在不同机器上的垂直体进行通信   java Mockserver:收到请求后进行回调   java无法将Json字符串转换为Map<string,Object>   java如何按升序排列输出?   java视图行,带有oracle键。jbo。在SrCategoryParentIterator中找不到键[300100120394155]   javafxmysql连接示例   java正在等待加载完成   java是否可以将同一个有状态会话bean实例注入多个其他会话bean?   java无法让万向节检测离开或进入区域   使用JavaCV和OpenCV的java提供了dyld:lazy符号绑定失败:找不到符号:__sincos_stret   xml解析无法使用Java读取xml文档   java无法更改工具栏的颜色   javaapachesshd和JSCH   java无法在firebase存储中检索图像url   java问题与executeUpdate   同一应用程序中不同活动之间的java SharedReference