一尘不染

Google App Engine搜索API

python

GAE SearchAPI的Python版本中查询搜索索引时,最好的搜索方式是:首先搜索单词与标题匹配的文档,然后再搜索与正文匹配的文档的项目?

例如给出:

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

  1. title符合条件的文件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.

阅读 278

收藏
2021-01-20

共1个答案

一尘不染

自定义评分是我们的首要任务之一。我们希望有一个很好的方法来尽快进行此类操作。

在您的特定情况下,您当然可以通过执行两个单独的查询来获得所需的结果:第一个查询对“ title”进行字段限制,第二个查询对“ body”进行限制。

2021-01-20