有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaGoogleSearchAPI:将所有数据存储数据加载到DocumentBuilder中,以便对所有记录进行全文搜索

我一直在https://developers.google.com/appengine/docs/java/search/overview上关注有关谷歌搜索API的教程。我找到的信息非常清楚地说明了如何构建文档并将其加载到索引中。我不确定的是如何将数据存储数据加载到文档中

我试图实现的是对几个字段进行简单的%LIKE%查询。例如,我正在一个音乐图书馆工作。如果用户键入“glori”,那么我想使用搜索API返回标题中某处带有“glori”的所有实体。我已经通过将搜索文本添加到“\uFFFD”实现了“开始于”的解决方案,但是,我发现这还不够。我的用户将是新手,如果他们不必像传统搜索那样选择一个领域,这也会很有帮助。因此,全文搜索似乎是解决方案

以下是我的问题:

  1. 我的数据存储中的每条记录都应该是文档吗?还是将所有记录合并到一个文档中?我有一个非常固定的数据存储大小,只有1000条记录。有人能提供一个正确方法的例子吗

  2. 我想将整个数据存储实体(只有8个字段)作为实体类型的一个Iterable返回。我们是否指定了需要返回的每个字段?这个例子只是说:

    for(ScoredDocument ScoredDocument:结果){ //工艺文件 }

有没有人能举例说明存储文档中的内容?这正是我们输入的内容,还是您必须再次识别每个字段?或者是处理返回数据存储实体的ScoredDocument的示例

如果有人能帮我填补这些空白,我将不胜感激

谢谢你和我一起看这个


共 (1) 个答案

  1. # 1 楼答案

    What am trying to achieve is a simple %LIKE% query on a few fields

    为了实现这一点,您需要“标记”您的记录名称,GAE提供了全文搜索,因此为了让您获得部分匹配,您需要为每个记录添加部分匹配,以便:

    如果你的记录名为“荣耀”,你应该为“G”、“Gl”、“Glo”、“Glor”、“y”、“ry”、“ory”、“lory”添加标记

    下面是我用来提供部分搜索结果的一个非常基本的实现(仅适用于“开始于”而不是“结束于”)

    public void addField(String name, String value, boolean tokenize) {
        addField(Field.newBuilder().setName(name).setText(value));
        if (tokenize) {
            for (int i = startTokenIndex ; i < value.length() ;i++) {
                addField(Field.newBuilder().setName("token" + (lastTokenIndex++))
                        .setText(value.substring(0, i)));
            }
    
        }
    }
    

    Should each record in my datastore be a document?

    。您甚至可以将文档ID与实体的数据存储ID进行匹配,以便快速匹配。(也可以将其作为单独的字段添加)

    I would like to return the entire datastore entity (it's only 8 fields) as an Iterable of the type of my entity. Do we specify each field we need to return?

    您需要在文档中存储实体的ID,这样当搜索返回一组文档时,您只需检索具有这些ID的所有实体

    Does anybody have an example of what comes out of the stored document? Is it exactly what we put in or must you identify each field again? Or an example of processes a ScoredDocument returning a datastore entities?

    文档返回存储在其中的所有字段,以及大量数据,如评分、id等。在您的案例中,“处理”包括从文档中获取实体id

    如果你确定你的记录不会超过1000条,你可以在搜索索引中存储所有信息。请记住,索引并不是为此而设计的,在扩展时将面临一些严重的限制,而数据存储显然没有