Java 倒排索引中的短语搜索
我正在实现一个非常基本的倒排索引,并且我在实现一个短语搜索方法时遇到了问题 我的结构如下:Java 倒排索引中的短语搜索,java,inverted-index,match-phrase,Java,Inverted Index,Match Phrase,我正在实现一个非常基本的倒排索引,并且我在实现一个短语搜索方法时遇到了问题 我的结构如下: private Map<String, ArrayList<Integer>> postings; InvertedIndex.java:这里有一个数据结构: private Map<String, ArrayList<Postings>> index = new HashMap<String, ArrayList<Postings>&
private Map<String, ArrayList<Integer>> postings;
InvertedIndex.java:这里有一个数据结构:
private Map<String, ArrayList<Postings>> index = new HashMap<String, ArrayList<Postings>>();
private Map index=new HashMap();
我在文档中存储一个单词和一个包含所有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;
}
public ArrayList searchByPhrase(字符串…术语){
if(terms==null | | terms.length<2){
返回null;
}
ArrayList documents=新的ArrayList();
for(int i=0;i
我知道在这种方法中,我必须检查位置是否在彼此相距一个点的范围内。我还没有实现这一点,因为我希望首先能够找到相同的文档(目前还没有这样做)。当我运行这个程序时,我什么也没有得到,我知道有各种文档共享单词
我希望这个方法能够搜索各种大小的词(“你好,世界”,“非常感谢你的帮助”,等等)。我觉得我把这件事搞得太复杂了,但我对如何处理它感到非常困惑。如有任何建议,将不胜感激 p1,containsID必须仅检查一次过帐。你需要检查整个清单。实际上,为了提高效率,您需要在一个列表中构建一组所有文档ID,并查看另一个列表中是否有任何ID在该集合中。但是,当您开始合并列表以查找连续的单词位置时,您将免费获得这些信息,因此不必麻烦将其作为单独的步骤。