【问题标题】:Why doesn't this Google AppEngine Search API query find any results?为什么此 Google AppEngine Search API 查询找不到任何结果?
【发布时间】:2013-11-12 05:28:18
【问题描述】:

我正在尝试使用此查询搜索索引文档,结果显示为 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());

管理控制台中的索引

参考

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+"'");

【问题讨论】:

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


    【解决方案1】:

    目前在 Java 开发服务器上搜索带有空格的 atom 字段不工作;但我相信它可以在生产环境和 Python 开发服务器上运行。

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

    【讨论】:

    • 哇,你是对的!这在生产中有效:sbu:("Food Service") 。为什么他们会让生产服务器与开发服务器不同?他们为什么不直接使用 WEB-INF/lib 中的 JAR?
    • @Chole 不确定,我认为要么是因为他们想要保护他们的秘密武器(哈!什么秘密?),要么是因为真正的 App Engine 调用了 Python,并且具有各种冗余存储和弹性功能,对于本地开发环境而言,这可能被视为过于重量级。不幸的是,这会导致这样的不兼容:(
    • 我很惊讶看到这个错误,因为它是在 2012 年 8 月的 1.7 版中报告的。我为bug report 加注了星标;显然我是第 10 个在乎的人?我猜Java GAE不是很流行?
    • Java GAE 1.9.5 版似乎已经解决了这个问题
    【解决方案2】:

    我不熟悉该平台,但文档似乎建议仅当您使用 ORAND 搜索多个值时,方括号才包含在值周围。尝试使用year: 2013 代替year:( 2013 ),或使用sbu: "Special Bictums Unit" 代替sbu:("Special Bictums Unit")

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

    来自文档:

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

    要搜索 & 符号,您似乎需要将其括在引号中,例如"&amp;"。但是,您不能只搜索原子字段的一部分:

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

    如果您想查找其中某处包含与号的所有字段,它们必须是文本或 HTML 字段。大概关于特殊字符和引号的规则也适用于这些。

    【讨论】:

    • 我已经试过不带括号了。我将其添加到问题中。我还添加了它索引的部分,这表明原子值中没有任何尾随或前面的空格。
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多