2017-06-20 33 views
1

我有一個模型,其中包含各種不同的字段類型,我希望Algolia搜索引擎能夠正確編制索引。到目前爲止,我已經能夠非常簡單地處理models.char_fields - 現在我想,索引各種其他字段類型(例如,ForeignKey「objects」,ImageFieldsDateTime字段等等)的最佳方式是什麼。Django中的Algolia模型集成 - 處理各種字段類型的可能方式

我注意到的一件事是,Algolia將獲取並存儲一個DateTimeField作爲Unix標準時間......所以,最初我以爲我可以使用{% humanize %}來呈現人類可讀的模板,但是沒有運氣。

我想知道是否有人知道從模型中拖出有用信息的方法 - 我所擁有的一個想法是抓住視圖中的對象,然後爲每個返回的對象提供一個唯一標識,然後工作一些條件流動以結合模型的獨特身份,那麼我可以像普通模型一樣使用該模型......?如:

def instant_search(request): 
    posts = Post.published.all() 

    context = { 
     'appID': settings.ALGOLIA['APPLICATION_ID'], 
     'searchKey': settings.ALGOLIA['SEARCH_API_KEY'], 
     'indexName': get_adapter(Post).index_name, 
     'posts': posts, 
    } 

    return render(request, 'blog/frame/instant_search.html', context) 

的模板中,我可以使用{% for posts in post %} {% if post.id = _highlightResult.id.value %} ...do some stuff {% endif %} {% endfor %}

如果這是不太足夠快(和我幾乎保證它不會)我在想,如果Algolia可以處理關鍵信息,例如將模型中定義的圖像的url拖出模板,例如,與模板中的例如post.image.url非常類似,或者模型中的DateTime字段models.DateTimeField(default=timezone.now)中的人可讀值。這將是非常好的這樣做,因爲Algolia指標定義的示範田......

回答

1

只是想出這一個:

models.py我不得不定義屬性的方法來獲取一個操縱定製值Algolia理解:

例如,我已經定義的類模型下面我想指數:

def image_url(self): 
    """Get upload_to path specific to this photo: Algolia recognizable format.""" 
    return self.image_scroll_1.url 

def published_date(self): 
    """Returns a humanized date format for Algolia indexing.""" 
    humanized_published_date = str(self.publish.strftime("%A, %d, %B %Y %I:%M%p")) 
    return humanized_published_date 

希望這將有助於其他人誰正在與Algolia和工作過各種tutoria ls(我通過例子使用Django)。

這些就在index.py引用如下:

從algoliasearch_django進口AlgoliaIndex

class PostIndex(AlgoliaIndex): 
    fields = ('title', 'post_author', 'lead_in', 'published_date', 'keyword_tags', 'image_url', 'get_absolute_url') 

隨着你可能喜歡的任何其他可選參數。

相關問題