PHOTARK-56 - fixing the issue,and making tags present even after restert of the server
git-svn-id: https://svn.apache.org/repos/asf/incubator/photark/trunk@998442 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/photark-search/src/main/java/org/apache/photark/search/services/impl/SearchServiceImpl.java b/photark-search/src/main/java/org/apache/photark/search/services/impl/SearchServiceImpl.java
index 9f0c5cc..f94faf3 100644
--- a/photark-search/src/main/java/org/apache/photark/search/services/impl/SearchServiceImpl.java
+++ b/photark-search/src/main/java/org/apache/photark/search/services/impl/SearchServiceImpl.java
@@ -74,14 +74,14 @@
static {
Collections.addAll(INDEXED_METADATA,
- "XResolution",
- "YResolution",
- "Date Time",
- "Date Time Original",
- "GPS Latitude Ref",
- "GPS Latitude",
- "GPS Longitude Ref",
- "GPS Longitude");
+ "XResolution",
+ "YResolution",
+ "Date Time",
+ "Date Time Original",
+ "GPS Latitude Ref",
+ "GPS Latitude",
+ "GPS Longitude Ref",
+ "GPS Longitude");
}
final private Analyzer defaultAnalyzer = new TagAnalyzer();
@@ -89,8 +89,8 @@
private IndexWriter indexWriter;
private MultiFieldQueryParser queryParser =
- new MultiFieldQueryParser(new String[] {TAG_FIELD, IMAGE_NAME_FIELD, IMAGE_ALBUM_FIELD}, this.defaultAnalyzer);
-
+ new MultiFieldQueryParser(new String[]{TAG_FIELD, IMAGE_NAME_FIELD, IMAGE_ALBUM_FIELD}, this.defaultAnalyzer);
+
{
this.queryParser.setAllowLeadingWildcard(true);
}
@@ -105,11 +105,14 @@
@Init
public void init() throws IOException {
this.dir = FSDirectory.getDirectory(new File(this.indexDirectoryPath));
+ if (this.dir.fileExists("write.lock")) {
+ this.dir.deleteFile("write.lock");
+ }
this.indexWriter = new IndexWriter(dir, this.defaultAnalyzer, MaxFieldLength.UNLIMITED);
this.indexSearcher = new IndexSearcher(this.dir);
-
}
+
public void clear() {
try {
@@ -153,15 +156,18 @@
@AllowsPassByReference
public void imageAdded(String albumName, Image image) {
-
try {
Term idTerm = getImageIDTerm(albumName, image);
- Document doc = createDocument(idTerm, albumName, image);
- this.indexWriter.deleteDocuments(idTerm);
- this.indexWriter.addDocument(doc);
+ TopDocs docs = this.indexSearcher.search(new TermQuery(idTerm), 1);
- this.indexWriter.commit();
- reopenIndexSearcher();
+ if (docs.scoreDocs.length < 1) {
+ Document doc = createDocument(idTerm, albumName, image);
+ // this.indexWriter.updateDocument(idTerm,doc);
+ this.indexWriter.deleteDocuments(idTerm);
+ this.indexWriter.addDocument(doc);
+ this.indexWriter.commit();
+ reopenIndexSearcher();
+ }
} catch (Exception e) {
// create a new exception type for this
@@ -188,8 +194,8 @@
doc.add(new Field(IMAGE_ALBUM_FIELD, albumName, Store.YES, Index.ANALYZED));
doc.add(new Field(IMAGE_NAME_FIELD, image.getName(), Store.YES, Index.ANALYZED));
doc.add(new Field(IMAGE_DATE_POSTED_FIELD, DateTools.timeToString(image.getDatePosted().getTime(),
- Resolution.MINUTE), Store.YES,
- Index.NOT_ANALYZED));
+ Resolution.MINUTE), Store.YES,
+ Index.NOT_ANALYZED));
// for (ImageMetadata metadata : image.getImageMetadata()) {
//
@@ -229,10 +235,10 @@
}
try {
- this.indexWriter.close();
+ this.indexWriter.commit();
+ this.indexWriter.close(true);
} catch (Exception e) {
}
-
}
private static Term getImageIDTerm(String albumName, Image image) {
@@ -257,13 +263,13 @@
Field[] tagFields = doc.getFields(TAG_FIELD);
for (Field tagField : tagFields) {
-
+
if (tagField.stringValue().equals(tag)) {
return;
}
-
+
}
-
+
doc.add(new Field(TAG_FIELD, tag, Store.YES, Index.ANALYZED));
this.indexWriter.deleteDocuments(pictureID);
@@ -293,7 +299,7 @@
Document newDoc = new Document();
for (Object obj : fieldList) {
- Fieldable field = (Fieldable)obj;
+ Fieldable field = (Fieldable) obj;
if (!field.name().equals(TAG_FIELD) || !field.stringValue().equals(tag)) {
newDoc.add(field);