making search more comprehensible by associating
authorjohn <john>
Tue, 26 Nov 2002 18:31:52 +0000 (18:31 +0000)
committerjohn <john>
Tue, 26 Nov 2002 18:31:52 +0000 (18:31 +0000)
the (potentially weird or potentially fairly intuitive) indexing logic
for each piece of entity data with the (correspondingly weird or intuitive) logic
for searching and result displaying.

also probably useful in future configuration schemes.....

source/mircoders/search/AudioSearchTerm.java [new file with mode: 0755]
source/mircoders/search/ImagesSearchTerm.java [new file with mode: 0755]
source/mircoders/search/KeywordSearchTerm.java [new file with mode: 0755]
source/mircoders/search/SearchTerm.java [new file with mode: 0755]
source/mircoders/search/TextSearchTerm.java [new file with mode: 0755]
source/mircoders/search/UnIndexedSearchTerm.java [new file with mode: 0755]
source/mircoders/search/UnStoredSearchTerm.java [new file with mode: 0755]
source/mircoders/search/VideoSearchTerm.java [new file with mode: 0755]

diff --git a/source/mircoders/search/AudioSearchTerm.java b/source/mircoders/search/AudioSearchTerm.java
new file mode 100755 (executable)
index 0000000..5597c49
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+import mir.storage.*;
+import mircoders.entity.*;
+import mircoders.storage.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import freemarker.template.*;
+
+
+public class AudioSearchTerm extends SearchTerm{
+  
+  
+  public static String matchField       = "hasAudio"; 
+  public static String paramName        = "search_hasAudio"; 
+  public static String templateVariable = "hasAudio";
+
+  public void index(Document doc, Entity entity) throws StorageObjectException{
+    EntityList audio = DatabaseContentToMedia.getInstance().getAudio((EntityContent) entity);
+    if (audio != null && audio.size()>0){
+      doc.add(Field.Keyword(matchField,"y"));
+    }
+  }
+
+  public String makeTerm(HttpServletRequest req){
+    String wanted = req.getParameter(paramName);
+    if (wanted == "y"){
+      return matchField + ":" + "\"" + wanted + "\"";
+    }
+    else {
+      return null;
+    }
+  }
+  public void returnMeta(SimpleHash result,Document doc){
+    result.put(templateVariable,doc.get(matchField));
+  }
+  
+
+}
+
+
diff --git a/source/mircoders/search/ImagesSearchTerm.java b/source/mircoders/search/ImagesSearchTerm.java
new file mode 100755 (executable)
index 0000000..2f5b4c6
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import java.util.*;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+import mir.storage.*;
+import mircoders.entity.*;
+import mircoders.storage.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import freemarker.template.*;
+
+
+public class ImagesSearchTerm extends SearchTerm{
+  
+  
+  public static String matchField       = "hasImages"; 
+  public static String paramName        = "search_hasImages"; 
+  public static String dataField        = "images"; 
+  public static String templateVariable = "images";
+
+  public void index(Document doc, Entity entity) throws StorageObjectException{
+    EntityList images = DatabaseContentToMedia.getInstance().getImages((EntityContent) entity);
+    if (images != null && images.size()>0){
+      doc.add(Field.Keyword(matchField,"y"));
+      String imageURLString = "";
+      for(int k=0;k<images.size();k++){
+       if (k != 0){
+         imageURLString = imageURLString + ":";
+       }
+       imageURLString = imageURLString + (images.elementAt(k)).getValue("icon_path");
+      }
+      doc.add(Field.UnIndexed("images",imageURLString));
+    }
+
+
+  }
+
+  public String makeTerm(HttpServletRequest req){
+    String wanted = req.getParameter(paramName);
+    if (wanted == "y"){
+      return matchField + ":" + "\"" + wanted + "\"";
+    }
+    else {
+      return null;
+    }
+  }
+  public void returnMeta(SimpleHash result,Document doc){
+    String imageURLString=doc.get(dataField);
+    if (imageURLString != null){
+      SimpleList theImages = new SimpleList();
+      StringTokenizer st = new StringTokenizer(imageURLString,":");
+      while (st.hasMoreTokens()) {
+       String imageURL=st.nextToken();
+       theImages.add(new SimpleScalar(imageURL));
+      }
+      result.put(templateVariable,theImages);
+    }
+  }
+  
+
+}
+
+
diff --git a/source/mircoders/search/KeywordSearchTerm.java b/source/mircoders/search/KeywordSearchTerm.java
new file mode 100755 (executable)
index 0000000..4ed03c1
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import freemarker.template.*;
+
+
+public class KeywordSearchTerm extends SearchTerm{
+  
+  public void index(Document doc, Entity entity){
+    doc.add(Field.Keyword(matchField,entity.getValue(partOfEntity)));
+  }
+
+  public void indexValue(Document doc, String value){
+    doc.add(Field.Keyword(matchField, value));
+  }
+
+
+  public String makeTerm(HttpServletRequest req){
+      String wanted = req.getParameter(paramName);
+      if (wanted != null && wanted != ""){
+       return matchField + ":" + "\"" + wanted + "\"";
+      }
+      else {
+       return null;
+      }
+  }
+  public void returnMeta(SimpleHash result,Document doc){
+    result.put(templateVariable,doc.get(dataField)); 
+  }
+  
+
+}
+
+
diff --git a/source/mircoders/search/SearchTerm.java b/source/mircoders/search/SearchTerm.java
new file mode 100755 (executable)
index 0000000..ad43ee8
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+import mircoders.entity.*;
+import mircoders.storage.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+
+import freemarker.template.*;
+
+
+abstract public class SearchTerm {
+  
+  public static String  partOfEntity; 
+  public static String  paramName;    
+  public static String  matchField;   
+  public static String  dataField;    
+  public static String  templateVariable;    
+
+  public SearchTerm(String anEntityPart,String aParamName,String aMatchField,String aDataField, String aTemplateVariable){
+    //for more reusable SearchTerm types
+    partOfEntity     = anEntityPart;       
+    paramName        = aParamName;    
+    matchField       = aMatchField;   
+    dataField        = aDataField;    
+    templateVariable = aTemplateVariable;
+  }
+
+  public SearchTerm(){
+    //do nothing, we'll get the values from the extending class definition instead 
+  }
+
+  abstract public void index(Document doc, Entity entity) throws Exception;
+  abstract public String makeTerm(HttpServletRequest req);
+  abstract public void returnMeta(SimpleHash result,Document doc);
+  
+
+}
diff --git a/source/mircoders/search/TextSearchTerm.java b/source/mircoders/search/TextSearchTerm.java
new file mode 100755 (executable)
index 0000000..fba14ba
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import freemarker.template.*;
+
+
+public class TextSearchTerm extends SearchTerm{
+  
+  public void index(Document doc, Entity entity){
+    doc.add(Field.Text(matchField,entity.getValue(partOfEntity)));
+  }
+
+  public void indexValue(Document doc, String value){
+    doc.add(Field.Text(matchField, value));
+  }
+
+
+  public String makeTerm(HttpServletRequest req){
+      String wanted = req.getParameter(paramName);
+      if (wanted != null && wanted != ""){
+       return matchField + ":" + "\"" + wanted + "\"";
+      }
+      else {
+       return null;
+      }
+  }
+  public void returnMeta(SimpleHash result,Document doc){
+    result.put(templateVariable,doc.get(dataField)); 
+  }
+  
+
+}
+
+
diff --git a/source/mircoders/search/UnIndexedSearchTerm.java b/source/mircoders/search/UnIndexedSearchTerm.java
new file mode 100755 (executable)
index 0000000..17da638
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import freemarker.template.*;
+
+
+public class UnIndexedSearchTerm extends SearchTerm{
+  
+  public void index(Document doc, Entity entity){
+    doc.add(Field.Text(dataField,entity.getValue(partOfEntity)));
+  }
+
+  public void indexValue(Document doc, String value){
+    doc.add(Field.Text(dataField, value));
+  }
+
+
+  public String makeTerm(HttpServletRequest req){
+    // it isn't indexed!       
+    return null;
+  }
+    
+  public void returnMeta(SimpleHash result,Document doc){
+    result.put(templateVariable,doc.get(dataField)); 
+  }
+  
+
+}
+
+
+
diff --git a/source/mircoders/search/UnStoredSearchTerm.java b/source/mircoders/search/UnStoredSearchTerm.java
new file mode 100755 (executable)
index 0000000..9978432
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import freemarker.template.*;
+
+
+public class UnStoredSearchTerm extends SearchTerm{
+  
+  public void index(Document doc, Entity entity){
+    doc.add(Field.UnStored(matchField,entity.getValue(partOfEntity)));
+  }
+
+  public void indexValue(Document doc, String value){
+    doc.add(Field.UnStored(matchField, value));
+  }
+    
+  public String makeTerm(HttpServletRequest req){
+      String wanted = req.getParameter(paramName);
+      if (wanted != null && wanted != ""){
+       return matchField + ":" + "\"" + wanted + "\"";
+      }
+      else {
+       return null;
+      }
+  }
+  public void returnMeta(SimpleHash result,Document doc){
+      //do nothing...we don't have the data stored!
+  }
+  
+
+}
+
+
diff --git a/source/mircoders/search/VideoSearchTerm.java b/source/mircoders/search/VideoSearchTerm.java
new file mode 100755 (executable)
index 0000000..3b01ed1
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
+package mircoders.search;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import mir.entity.*;
+import mir.storage.*;
+import mircoders.entity.*;
+import mircoders.storage.*;
+
+import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import freemarker.template.*;
+
+
+public class VideoSearchTerm extends SearchTerm{
+  
+  
+  public static String matchField       = "hasVideo"; 
+  public static String paramName        = "search_hasVideo"; 
+  public static String templateVariable = "hasVideo";
+
+  public void index(Document doc, Entity entity) throws StorageObjectException{
+    EntityList video = DatabaseContentToMedia.getInstance().getVideo((EntityContent) entity);
+    if (video != null && video.size()>0){
+      doc.add(Field.Keyword(matchField,"y"));
+    }
+  }
+
+  public String makeTerm(HttpServletRequest req){
+    String wanted = req.getParameter(paramName);
+    if (wanted == "y"){
+      return matchField + ":" + "\"" + wanted + "\"";
+    }
+    else {
+      return null;
+    }
+  }
+  public void returnMeta(SimpleHash result,Document doc){
+    result.put(templateVariable,doc.get(matchField));
+  }
+  
+
+}
+
+