私は多言語のDjangoサイトを構築しています。モデルデータの翻訳にはdjango-transmetaを使用しています。今では、多言語モデルで動作するDjango検索アプリケーションがあるかどうか疑問に思っています。私はHaystackと一緒に遊んだことがあり、単言語のサイトではうまく動作しますが、transmetaのメタクラスで動作させることはできません。多言語djangoサイトの検索機能
誰もがこれに関する経験はありますか?任意のポインタが評価されるだろう!
歓声、
マーティン
私は多言語のDjangoサイトを構築しています。モデルデータの翻訳にはdjango-transmetaを使用しています。今では、多言語モデルで動作するDjango検索アプリケーションがあるかどうか疑問に思っています。私はHaystackと一緒に遊んだことがあり、単言語のサイトではうまく動作しますが、transmetaのメタクラスで動作させることはできません。多言語djangoサイトの検索機能
誰もがこれに関する経験はありますか?任意のポインタが評価されるだろう!
歓声、
マーティン
あるgettextのプロジェクトとの.poファイルをバックエンドを更新しないだろうが、私はそれが助けを願って、他のユーザー がこのアイデアを改善し、到達できることよりよい解決策です。あなたは二つの問題に直面している(ジャンゴ-Transmetaのか、ジャンゴ・多言語を使用して)インデックスに多言語サイトをヘイスタックを使用して
:
1に応じて正しいインデックス)ランキングすべての言語のコンテンツ
は共通のプレフィックス と言語コードを使用して、すべてのにSearchIndexモデルにおける言語ごとに個別のフィールドを作成します。
text_en = indexes.CharField(model_attr='body_en', document=True)
text_pt = indexes.CharField(model_attr='body_pt')
あなたは明らかにテンプレートを使用することができ、インデックスいくつかのフィールドにしたい場合。 1つの索引だけがdocument = Trueを持つことができます。
あなたは 速く表示のためのプリレンダリングhttp://haystacksearch.org/docs/searchindex_api.htmlフィールドが必要な場合は、各言語に1つ(すなわち、rendered_en、rendered_pt)
2)正しいインデックス
デフォルトの干し草の山のクエリを作成する必要がありますauto_queryメソッドは、要求「 」に「q」クエリパラメータを受け取り、すべてのインデックスモデルで「コンテンツ」インデックスフィールド(document = Trueとマークされている)を検索するようにプログラムされています。 インデックスのうちの1つだけがdocument = Trueを持つことができ、私はSearchIndexが各djangoモデルに対して しかないと信じています。
共通検索フォームを使用して、最も簡単な解決策は、、、ではないコンテンツに基づいてフィルタリングする多言語SearchQuerySet を作成することであるが、text_に
from django.conf import settings
from django.utils.translation import get_language
from haystack.query import SearchQuerySet, DEFAULT_OPERATOR
class MlSearchQuerySet(SearchQuerySet):
def filter(self, **kwargs):
"""Narrows the search based on certain attributes and the default operator."""
if 'content' in kwargs:
kwd = kwargs.pop('content')
kwdkey = "text_%s" % str(get_language())
kwargs[kwdkey] = kwd
if getattr(settings, 'HAYSTACK_DEFAULT_OPERATOR', DEFAULT_OPERATOR) == 'OR':
return self.filter_or(**kwargs)
else:
return self.filter_and(**kwargs)
(テキストは、上記にSearchIndexモデル に使用されるプレフィックスです)
と、このクエリセットを使用してビューに検索URLを指す:
from haystack.forms import ModelSearchForm
from haystack.views import SearchView
urlpatterns += patterns('haystack.views',
url(r'^search/$', SearchView(
searchqueryset=MlSearchQuerySet(),
form_class=ModelSearchForm
), name='haystack_search_ml'),
)
今すぐ検索は、選択した言語を認識する必要があります。
オートコンプリート機能を使用していて、ビューを使用している場合:def search_autocomplete(request): sqs = SearchQuerySet()。autocomplete(content_auto = request.GET.get( 'q'、 '' ' ))[:5] ---------私たちはあなたのソリューションをどのように採用できますか? – ratata
方法について: 1.にSearchIndexクラス 'クラスSearchableIndex(indexes.SearchIndex、indexes.Indexable)にcontent_auto_
いくつかの商用製品があります - たとえばmultilingual indexerためSolrや言語を自動的に決定することが可能Luceneため。
私は商用製品が好きではありませんが、アイデアは素敵でシンプルです。ウェブサイトをクロールし、言語(メタタグなど)とインデックスを決定します。
検索エンジンを選択し、それを拡張して多言語サイトを処理してください。
良い質問ですが、これをどのように解決したかお知らせください。
ここに解決策があります。
Sphinxを使用してください。各ロケールの索引を作成します。例えば。記事-en_us、記事-es_mxなど
検索クエリをsphinx検索apiに渡すときは、ロケールコードをインデックス名に追加します。
how to setup sphinx with djangoの参考情報です。
あなたが依存関係を少なくしたいので、できるだけスフィンクスを避けてください。私はmultilinguaを達成するためにdjangoを使用しています。パラメータhl = languageCode eg hl = el for greekまたはappengineでサポートされている39以上の言語のdjango。 GAEのエンジニアは、関係なく、私の更新を完全なソリューションよりも出発点のこのより私のlanguagepack
私はここでそれを行う方法 - についての詳しい説明を書いた:http://anthony-tresontani.github.com/Django/2012/09/20/multilingual-search/
カスタムSolrのエンジン(バックエンド+クエリを)書いて意味や言語によって複数のコアを設定こと。
+1 - 興味深い質問です。 –
+1 - 興味深い質問、回答に興味があります – neuro