2013-12-18 20 views
6

Python版のGAE Search APIで検索インデックスを照会するときに、単語がタイトルに一致するドキュメントが最初に返されたアイテムを検索するベストプラクティスは何ですか?所与例えばGoogle App Engine Search API

body = """This is the body of the document, 
with a set of words""" 

my_document = search.Document(
    fields=[ 
    search.TextField(name='title', value='A Set Of Words'), 
    search.TextField(name='body', value=body), 
    ]) 

ことが可能である場合、どのように一つのフレーズがあるため、検索され、この優先度に返された結果と上記フォームのDocument Sのインデックスに検索を実行するかもしれません変数qsに:そのtitle

  1. ドキュメントqs一致しました。
  2. 本文がqs個の単語に一致する文書。

正しい解決策がMatchScorerを使用するように思われますが、この検索機能を使用していないため、私はこのマークを外している可能性があります。この文書では、MatchScorerの使い方ははっきりしていませんが、サブクラスと関数のオーバーロードを想定していますが、これは文書化されていないため、コードを掘り下げたわけではありません。

ここに欠けているものがあるのですか、これが正しい戦略ですか?このようなことが文書化されているところで私は逃しましたか?

documents = [ 
    dict(title="Alpha", body="A"),   # "Alpha" 
    dict(title="Beta", body="B Two"),  # "Beta" 
    dict(title="Alpha Two", body="A"),  # "Alpha2" 
] 

for doc in documents: 
    search.Document(
    fields=[ 
     search.TextField(name="title", value=doc.title), 
     search.TextField(name="body", value=doc.body), 
    ] 
) 
    index.put(doc) # for some search.Index 

# Then when we search, we search the Title and Body. 
index.search("Alpha") 
# returns [Alpha, Alpha2] 

# Results where the search is found in the Title are given higher weight. 
index.search("Two") 
# returns [Alpha2, Beta] -- note Alpha2 has 'Two' in the title. 

答えて

3

カスタム得点が最優先の機能要求の一つである:ちょうどここではわかりやすくするために


は、望ましい結果のより複雑な例です。できるだけ早くこのようなことをする良い方法があることを願っています。

"title"のフィールド制限を持つ最初のものと "body"の2番目の制限付きの2つのクエリを実行することで、もちろん望ましい結果を得ることができます。

+0

ありがとうございました。私はあなたが示唆しているように二重クエリについて考えましたが、結果を交差させて(重複を取得しないように)、カーソルを追跡することはちょっと面倒です。私は単純なものを見逃していたことを期待していました。これを行う良い方法が整理されるまで、私はこの答えを正しいものとします。乾杯。 –

+0

@Alan - それに関する更新はありますか? –

+1

@Alan - バンプ、これに関するニュース? –