在django中的使用

定义索引类

from haystack import indexes

# 导入你的模型类

from models import xxx

# 指定对于某个类的某些数据建立索引(模式 模型类名 + index)

class YourModelIndex(indexes.SearchIndex, indexes.indexable):

  # 索引字段document=True 表示索引字段 use_template=True 表示根据表中的哪些 字段建立索引文件

  text = indexes.CharField(document=True, use_template=True)

  def get_model(self):

    # 返回你的模型类

    return xxx

  # 建立索引的数据 这个方法返回什么就会根据哪些建立索引

  def index_queryset(self, using=None):

    return self.get_model().objects.all()

 

# 在templates 建立一个目录 固定的

  search > indexes > 模型类名(app名) > 模型类小写_text.txt 

  # 如xxx模型在goods app下 模型类名叫 Goods

  search > indexes > goods  > goods _text.txt 

  在 goods _text.txt 文件中写入

    # 指定根据表中的哪些字段建立索引数据

    {{ object.name }}  # Goods 表中如果有name  就表示根据 表中的name建立索引

    {{ object.desc }}  # 根据商品的简介建立索引

    {{ object.foreignKey字段.detail }}  # 根据 外建建立索引

 

 

 

生成索引

python3 manage.py rebuild_index

 

html:

  <form method='get' action='/search'>

    <input name='q' type='text' >

    <input  type='submit' value='提交' >

  </form>

 url 配制 

urlpatterns = [

  ...

  ...

  url(r'^search', include('haystack.urls'))

]

 在 templates/search 下建立 一个search.html 文件 搜索的结果会传给这个模板

 参数有: 

  query  搜索的关键字

  page  当前 页的page对象

    {% for item in page %}

      {{ item.object }}    // object 才是模型类的实例对象

    {% endfor %}

  paginator 分页paginator对象