Author: michiel
Date: 2010-04-19 14:08:55 +0200 (Mon, 19 Apr 2010)
New Revision: 41953
Modified:
mmbase/branches/MMBase-1_9/contributions/lucene/src/main/java/org/mmbase/module/lucene/MMBaseEntry.java
Log:
LUCENE-22
Modified:
mmbase/branches/MMBase-1_9/contributions/lucene/src/main/java/org/mmbase/module/lucene/MMBaseEntry.java
===================================================================
---
mmbase/branches/MMBase-1_9/contributions/lucene/src/main/java/org/mmbase/module/lucene/MMBaseEntry.java
2010-04-19 11:48:43 UTC (rev 41952)
+++
mmbase/branches/MMBase-1_9/contributions/lucene/src/main/java/org/mmbase/module/lucene/MMBaseEntry.java
2010-04-19 12:08:55 UTC (rev 41953)
@@ -76,23 +76,49 @@
return getIdentifier();
}
- protected void addStandardKeys(Document document) {
+ /**
+ * Adds the standard keys 'number', 'owner', 'builder' and returns a set
of the steps which still needs adding to the
+ * document. The set contains 'null' if this is not a multilevel or the
main step needs adding.
+ */
+ protected Set<String> addStandardKeys(Document document) {
+
log.debug("Adding standard keys");
// always add the 'element' number first, because that ensures that
document.get("number") returns 'the' node
- String id = getIdentifier();
- document.add(new Field("number", id, Field.Store.YES,
Field.Index.NOT_ANALYZED));
+ final String id = getIdentifier();
+ boolean elementAdded = false;
+ if (! Arrays.asList(document.getValues("number")).contains(id)) {
+ document.add(new Field("number", id, Field.Store.YES,
Field.Index.NOT_ANALYZED));
+ elementAdded = true;
+ }
+ final Set<String> result = new HashSet<String>();
+
if (multiLevel) {
document.add(new Field("builder", elementManager.getName(),
Field.Store.YES, Field.Index.NOT_ANALYZED)); // keyword
- log.debug("added builder as " + elementManager.getName());
- //for (org.mmbase.bridge.Field field :
node.getNodeManager().getFields()) {
- for (FieldIterator i =
node.getNodeManager().getFields().fieldIterator(); i.hasNext();) {
- org.mmbase.bridge.Field field = i.nextField();
- if (field.getName().indexOf(".") >= 0 ) continue;
- if (id.equals(field.getName())) continue; // was added already
+ log.debug("added builder as " + elementManager.getName() + " now
checking " + node.getNodeManager().getFields());
+ for (org.mmbase.bridge.Field field :
node.getNodeManager().getFields()) {
+ if (field.getName().indexOf(".") >= 0 ) {
+ continue;
+ }
+
try {
Node subNode = node.getNodeValue(field.getName());
- document.add(new Field("number", "" + subNode.getNumber(),
Field.Store.YES, Field.Index.NOT_ANALYZED)); // keyword
- document.add(new Field("owner",
subNode.getStringValue("owner"), Field.Store.YES, Field.Index.NOT_ANALYZED));
+ String number = "" + subNode.getNumber();
+ if ((elementAdded && number.equals(id)) ||
+
(!Arrays.asList(document.getValues("number")).contains(number))) {
+ document.add(new Field("number", "" +
subNode.getNumber(), Field.Store.YES, Field.Index.NOT_ANALYZED)); // keyword
+ document.add(new Field("owner",
subNode.getStringValue("owner"), Field.Store.YES, Field.Index.NOT_ANALYZED));
+ } else {
+ log.debug("Ignoring " + number + " because already
indexed for this document");
+ // ignore
+ }
+ String fieldKey = number + ":" + field;
+ if
(!Arrays.asList(document.getValues("indexed_fields")).contains(fieldKey)) {
+ document.add(new Field("indexed_fields", fieldKey,
Field.Store.YES, Field.Index.NOT_ANALYZED)); // keyword
+ result.add(field.getName());
+ } else {
+ log.debug("Ignoring " + fieldKey + " because already
indexed for this document");
+ }
+
} catch (Exception e) {
log.warn("Failed to load " + field.getName() + "from " +
node + " as a node value, continuing...");
}
@@ -101,21 +127,44 @@
document.add(new Field("builder",
node.getNodeManager().getName(), Field.Store.YES,
Field.Index.NOT_ANALYZED)); // keyword
log.debug("added builder as " + node.getNodeManager().getName());
document.add(new Field("owner", node.getStringValue("owner"),
Field.Store.YES, Field.Index.NOT_ANALYZED));
+ result.add(null);
}
+ return result;
+
}
public void index(Document document) {
- Map<String, Object> data = new HashMap<String, Object>();
+ final Map<String, Object> data = new HashMap<String, Object>();
if (log.isTraceEnabled()) {
- log.trace("Indexing " + getIdentifier() + "(" +
node.getNodeManager().getName() + ")");
+ log.trace("Indexing " + getIdentifier() + " (" +
node.getNodeManager().getName() + ")");
}
storeData(data);
- addStandardKeys(document);
+ Set<String> prefixes = addStandardKeys(document);
+ if (log.isDebugEnabled()) {
+ log.debug("Found prefixes " + prefixes + " data " + data);
+ }
for (IndexFieldDefinition fieldDefinition : fields) {
String fieldName = fieldDefinition.alias;
- if (fieldName == null) fieldName = fieldDefinition.fieldName;
+ if (fieldName == null) {
+ fieldName = fieldDefinition.fieldName;
+ }
+ {
+ String[] fieldNameParts =
fieldDefinition.fieldName.split("\\.", 2);
+ if (fieldNameParts.length == 1) {
+ if (!prefixes.contains(null)) {
+ log.debug("Skipping fields " +
fieldDefinition.fieldName + " (" + fieldName + ")");
+ continue;
+ }
+ } else {
+ if (!prefixes.contains(fieldNameParts[0])) {
+ log.debug("Skipping fields " +
fieldDefinition.fieldName + " (" + fieldName + ")");
+ continue;
+ }
+ }
+ }
+ log.debug(fieldName);
if (document.getField(fieldName) == null ||
!fieldDefinition.keyWord) {
String value = getFieldDataAsString(data, fieldName);
if (fieldDefinition.escaper != null) {
@@ -225,11 +274,14 @@
*/
@SuppressWarnings("fallthrough")
protected void storeData(Map<String, Object> map) {
+
Cloud cloud = elementManager.getCloud();
for (IndexFieldDefinition fieldDefinition : fields) {
String fieldName = fieldDefinition.fieldName;
String alias = fieldDefinition.alias;
- if (alias == null) alias = fieldDefinition.fieldName;
+ if (alias == null) {
+ alias = fieldDefinition.fieldName;
+ }
String decryptionPassword = fieldDefinition.decryptionPassword;
if (shouldIndex(fieldDefinition)) {
// some hackery
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs