use*_*502 6 search google-app-engine google-search-api
我有文件,我想用3种不同的语言搜索.由于我可以有多个具有相同名称/类型的字段,因此以下文档结构有效(这是一个简化示例).
document = search.Document(
fields=[
search.TextField(
name="name",
language="en",
value="dog"),
search.TextField(
name="name",
language="es",
value="perro"),
search.TextField(
name="name",
language="fr",
value="chien")
]
)
index = search.Index("my_index")
index.put(document)
Run Code Online (Sandbox Code Playgroud)
指定语言有助于Google标记化的价值TextField.
以下查询全部工作,每个返回一个结果:
print index.search("name: dog")
print index.search("name: perro")
print index.search("name: chien")
Run Code Online (Sandbox Code Playgroud)
这是我的问题:我可以将搜索限制为仅使用特定语言的目标字段吗?
目的是避免得到假阳性结果.由于每种语言都使用阿拉伯字母,因此使用西班牙语进行全文搜索的人可能会看到不相关的英语结果.
谢谢.
您可以使用构面将实际未出现在文档中的字段(元数据)添加到文档中。这些将指示文档中出现的语言。
文档插入:
index = search.Index("my_index")
document = search.Document(
fields=[
search.TextField(
name="name",
language="en",
value="dog"),
search.TextField(
name="name",
language="es",
value="perro"),
search.TextField(
name="name",
language="fr",
value="chien")
],
facets=[
search.AtomFacet(name='lang', value='en'),
search.AtomFacet(name='lang', value='es'),
search.AtomFacet(name='lang', value='fr'),
],
)
index.put(document)
document = search.Document(
fields=[
search.TextField(
name="name",
language="es",
value="gato"),
search.TextField(
name="name",
language="fr",
value="chat")
],
facets=[
# no english in this document so leave out lang='en'
search.AtomFacet(name='lang', value='es'),
search.AtomFacet(name='lang', value='fr'),
],
)
index.put(document)
Run Code Online (Sandbox Code Playgroud)
询问:
index = search.Index("my_index")
query = search.Query(
'', # query all documents, cats and dogs.
# filter docs by language facet
facet_refinements=[
search.FacetRefinement('lang', value='en'),
])
results = index.search(query)
for doc in results:
result = {}
for f in doc.fields:
# filter fields by language
if f.language == 'en':
result[f.name] = f.value
print result
Run Code Online (Sandbox Code Playgroud)
应该打印{u'name': u'dog'}.
请注意,虽然我们只能获取包含英语的文档,但我们仍然需要过滤掉这些文档中其他语言的字段。这就是为什么我们迭代这些字段时只将英文字段添加到result.
如果您想更多地了解分面搜索的更一般用例,这个答案给出了一个很好的主意。
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |