检索超过1000个结果的Google App Engine Search API

时间:2013-04-02 04:03:05

标签: google-app-engine full-text-search google-search-api

我需要能够检索索引中的所有可用记录。似乎1000是限制。还有什么我可以做的吗?

1 个答案:

答案 0 :(得分:-1)

我在我的一个项目中也面临着一些类似的问题,所以通过互联网进行研究并得到一个想法,我创建了一个变通方案,而不是使用Search API。我所做的是我的表中只有一个属性需要基于模式的搜索。我也在这里分享我的代码。

客观化实体类

@Entity
public class NewsFeed {
@Id
@Index
private Long feedID;
private String title;
private Set<String> titleKeywords;

// getters and setter
}

将关键字存储在同一个表中的逻辑。我已将实体的所有标题词拆分为关键字,并将它们存储在Set Object中。

NewsFeed newsFeed = new NewsFeed();
newsFeed.setTitle(title);
newsFeed.setTitleKeywords(getKeywordsSet(newsTitle));
//  save entity here

从标题(要搜索的字段)中提取关键字的方法

public Set<String> getKeywordsSet(String title) {
    Set<String> keywords = new HashSet<String>();
    String titleNews = title.toLowerCase();
    String[] array = titleNews.split(" ");
    for (int i = 0; i < array.length; i++) {
        // replacing all special characters here
        String word = array[i].replaceAll("\\W", "");
        keywords.add(word);
    }
    return keywords;
}

列出我们数据库中的所有供稿,最后通过以下逻辑匹配要搜索的参数。

public List<NewsFeed> getFilterJsonArray(String param){
// Listing all the objects of entity
    List<NewsFeed> list = newsFeedDao.listOrderedFeeds();
    List<NewsFeed> matchedObject = new ArrayList<NewsFeed>();
    for (NewsFeed newsFeed : list) {

/**
* main logic for pattern matched keywords
**/
        if (isAnElementInSet(newsFeed.getTitleKeywords(), param.toLowerCase())) {
            matchedObject.add(newsFeed);
        }
    }
    return matchedObject;
}

public boolean isAnElementInSet(Set<String> keywords, String param) {
    String []params = param.split(" ");
    if (keywords.size() > 0) {
        for(String splittedParam : params){
            if (keywords.contains(splittedParam)) {
                return true;
            } else{
                for (String keyword : keywords) {
                    if(keyword.contains(splittedParam)){
                        return true;
                    }
                }
                return false;
            }
        }
        return true;
    }else{
        return false;
    }
}

我知道这不是搜索事物的最佳解决方案,但这个解决方案对我来说非常好。我只是在这里分享它,以便在这个逻辑中得到改进。