为什么Google AppEngine Search API查询没有找到任何结果?

时间:2013-11-01 01:42:04

标签: java google-app-engine google-search-api

我正在尝试使用此查询搜索索引文档,即使项目存在,它也会显示0结果。为什么呢?

在描述字段中搜索关键字并按年份搜索。 'sbu'是一个原子场。

日志

INFO: Searching with query:  year:( 2013  )  sbu:(Special Bictums Unit) 
Oct 31, 2013 8:36:17 PM com.mwv.pic.service.SearchService search
INFO: results.size:0

INFO: Searching with query:  year:( 2013  )  sbu:("Special Bictums Unit") 
INFO: results.size:0

INFO: Searching with query:  sbu:("Special Bictums Unit") 
INFO: results.size:0

INFO: Searching with query:  sbu:"Special Bictums Unit" 
INFO: results.size:0

INFO: Searching with query:  year:( 2013  ) 
INFO: results.size:3

代码

    log.info("Searching with query: " + q);
    try {
        Results<ScoredDocument> results = getIndex().search(q);
        log.info("results.size:"+results.getNumberReturned());

管理控制台中的索引

Imgur

参考

https://developers.google.com/appengine/docs/java/search/query_strings

索引值

Nov 04, 2013 5:55:44 PM com.mwv.pic.service.SearchService indexStudy
INFO: add field sbu:'Special Bictums Unit'

builder.addField(Field.newBuilder().setName("sbu").setAtom(sbu));
log.info("add field sbu:'"+sbu+"'");

2 个答案:

答案 0 :(得分:5)

在Java开发服务器上搜索当前包含空格的原子字段;但我相信它适用于生产,也适用于Python开发服务器。

推荐的查询语法是:[sbu:“Special Bictums Unit”](不带方括号)。

答案 1 :(得分:2)

我不熟悉该平台,但是如果您使用ORAND来搜索多个值,则文档似乎表明括号仅包含在值周围。尝试使用year: 2013代替year:( 2013 ),或sbu: "Special Bictums Unit"代替sbu:("Special Bictums Unit")

此外,搜索查询周围似乎还有其他空格。我不怀疑这是一个问题,但你可以在字符串上调用trim()来返回没有这些的版本,即q = q.trim();

来自文档:

  

如果要搜索包含空格或特殊字符的原子字段,请将值括在引号中。

要搜索&符号,您似乎需要将其括在引号中,例如"&"。但是,您无法仅搜索原子场的一部分:

  

原子字段唯一有效的关系运算符是相等运算符。 atom字段的完整内容必须与查询值匹配。

如果要查找其中包含“&”符号的所有字段,则它们必须是文本或HTML字段。据推测,关于特殊字符和引号的规则也适用于这些规则。