Project

General

Profile

« Previous | Next » 

Revision 61831

updated term node serialization to meet the requirements discussed in https://support.openaire.eu/issues/7083

View differences:

TermNode.java
2 2

  
3 3
import java.text.ParseException;
4 4
import java.text.SimpleDateFormat;
5
import java.util.Arrays;
5 6
import java.util.List;
6 7
import java.util.Map;
7 8
import java.util.Map.Entry;
9
import java.util.Optional;
10
import java.util.stream.Collectors;
11
import java.util.stream.Stream;
12
import java.util.stream.StreamSupport;
8 13

  
9 14
import com.google.common.base.Function;
10 15
import com.google.common.base.Joiner;
......
50 55

  
51 56
	@Override
52 57
	public String toLucene() {
53
		//StringTokenizer termTokenizer = new StringTokenizer(value, " ");
54
		//StringTokenizer weightTokenizer = new StringTokenizer(value, " ");
55
		final Iterable<String> termTokenizer = Splitter.on(" ").omitEmptyStrings().split(value);
56
		final Iterable<String> weightTokenizer = Splitter.on(" ").omitEmptyStrings().split(value);
58
		return _toLucene().trim();
59
	}
60

  
61
	private String _toLucene() {
62
		final Stream<String> termTokenizer = Splitter.on(" ").omitEmptyStrings().splitToList(value).stream();
63
		final Stream<String> weightTokenizer = Splitter.on(" ").omitEmptyStrings().splitToList(value).stream();
57 64
		switch (rel) {
58 65
		case EXACT:
59 66
			final String lucene = getFieldName() + ":" + "\"" + value + "\"";
60 67
			return StringUtils.isNotBlank(weight()) ? lucene + weight() + " " + expand(value) : lucene;
61 68
		case EQUAL:
62 69
		case ALL:
63
			return "(" + handleTokens(termTokenizer, "AND") + " " + expandTokens(weightTokenizer) + ")";
64 70
		case ANY:
65
			return "(" + handleTokens(termTokenizer, "OR") + " " + expandTokens(weightTokenizer) + ")";
71
			return handleTokens(termTokenizer) + " " + expandTokens(weightTokenizer);
66 72
		case NOT:
67 73
			return "NOT " + field + ":" + "\"" + value + "\"";
68 74
		case LT:
......
108 114
		return (weights != null) && (weights.get(field) != null) ? "^" + weights.get(field) : "";
109 115
	}
110 116

  
111
	private String expandTokens(final Iterable<String> tokens) {
112
		return Joiner.on("").skipNulls().join(Iterables.transform(tokens, new Function<String, String>() {
113
			@Override
114
			public String apply(final String s) {
115
				if (field.equals(dnetDefaultField.toLowerCase()) || field.equals(dnetDefaultField.toLowerCase())) {
116
					return expand(s);
117
				}
118
				return null;
119
			}
120
		})).trim();
117
	private String expandTokens(final Stream<String> tokens) {
118
		return tokens
119
				.filter(s -> field.equals(dnetDefaultField.toLowerCase()))
120
				.map(s -> expand(s))
121
				.collect(Collectors.joining(""))
122
				.trim();
121 123
	}
122 124

  
123 125
	private String expand(final String token) {
......
130 132
		return ret.trim();
131 133
	}
132 134

  
133
	private String handleTokens(final Iterable<String> tokens, final String op) {
134
		final String separator = " " + op + " ";
135
		return Joiner.on(separator).join(Iterables.transform(tokens, new Function<String, String>() {
136
			@Override
137
			public String apply(final String s) {
138
				return field + ":" + checkEscaping(s) + weight();
139
			}
140
		})).trim();
135
	private String handleTokens(final Stream<String> tokens) {
136
		//final String separator = " " + op + " ";
137
		final String separator = " ";
138
		return tokens
139
				.map(t -> field + ":" + checkEscaping(t) + weight())
140
				.collect(Collectors.joining(separator))
141
				.trim();
141 142
	}
142 143

  
143 144
	private String checkEscaping(String token) {

Also available in: Unified diff