在倒排索引

时间:2016-03-25 02:41:02

标签: java inverted-index match-phrase

我正在实现一个非常基本的倒排索引,我在实现短语搜索方法时遇到了麻烦。

我有以下结构:

InvertedIndex.java:这里我有一个数据结构:

private Map<String, ArrayList<Postings>> index = new HashMap<String, ArrayList<Postings>>(); 

我在其中存储一个单词和一个发布列表,其中包含文档中的所有docId和相关术语位置。

My Postings.java类具有以下结构:

private Map<String, ArrayList<Integer>> postings; 

我有所有这些数据结构的getter和setter,所以我不包括它们,因为这篇文章太多了。 字符串是docId,Arraylist保存文档中所有位置的单词。

我有一个类,我正在实现以下方法按短语搜索:

    public ArrayList<String> searchByPhrase(String...terms){
        if (terms == null || terms.length < 2){
            return null; 
        }

        ArrayList<String> documents = new ArrayList<String>(); 

        for (int i = 0; i < terms.length; i++){
            ArrayList<Postings> postings1 = index.getPostings(terms[i]);
            if ((i + 1) < terms.length){
                ArrayList<Postings> postings2 = index.getPostings(terms[i+1]);

                int smaller = 0; 
                if (postings2.size() < postings1.size()){
                    smaller = postings2.size(); 
                }
                else {
                    smaller = postings1.size(); 
                }

                for (int j = 0; j < smaller; j++){
                        Postings p1 = postings1.get(j); 
                        Postings p2 = postings2.get(j); 
                        if (p1.containsID(p2.getDocId())){
                            System.out.println("FOUND MATCHING DOC");
                            //Do position checking in here
                        }   
                }
            }

        }


        return documents; 
    }

我知道在这种方法中我必须检查位置是否在彼此之间的一个位置。我还没有实现,因为我想首先能够找到相同的文档(这是目前没有做的)。当我运行这个时,我什么也得不回来,我知道各种文件,我知道这些文件。

我希望这种方法能够搜索各种大小的术语(&#34;你好世界&#34;,&#34;非常感谢你的帮助&#34;等等......)。我觉得我过于复杂,但我很失落如何解决它。任何建议,将不胜感激。

0 个答案:

没有答案