Java 类org.apache.lucene.search.Filter 实例源码
项目:Equella
文件:ItemIndex.java
private OpenBitSet searchRequestToBitSet(@Nullable final Search searchreq, IndexSearcher searcher,
IndexReader reader) throws IOException
{
if( searchreq != null )
{
Filter filters = getFilter(searchreq);
Query query = getQuery(searchreq, null, false);
BitSetCollector collector = new BitSetCollector();
searcher.search(query, filters, collector);
return collector.getBitSet();
}
else
{
return (OpenBitSet) new InstitutionFilter().getDocIdSet(reader);
}
}
项目:lams
文件:TermsFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
List<BytesRef> terms = new ArrayList<>();
String text = DOMUtils.getNonBlankTextOrFail(e);
String fieldName = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
TokenStream ts = null;
try {
ts = analyzer.tokenStream(fieldName, text);
TermToBytesRefAttribute termAtt = ts.addAttribute(TermToBytesRefAttribute.class);
BytesRef bytes = termAtt.getBytesRef();
ts.reset();
while (ts.incrementToken()) {
termAtt.fillBytesRef();
terms.add(BytesRef.deepCopyOf(bytes));
}
ts.end();
}
catch (IOException ioe) {
throw new RuntimeException("Error constructing terms from index:" + ioe);
} finally {
IOUtils.closeWhileHandlingException(ts);
}
return new TermsFilter(fieldName, terms);
}
项目:lams
文件:BooleanFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
BooleanFilter bf = new BooleanFilter();
NodeList nl = e.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
if (node.getNodeName().equals("Clause")) {
Element clauseElem = (Element) node;
BooleanClause.Occur occurs = BooleanQueryBuilder.getOccursValue(clauseElem);
Element clauseFilter = DOMUtils.getFirstChildOrFail(clauseElem);
Filter f = factory.getFilter(clauseFilter);
bf.add(new FilterClause(f, occurs));
}
}
return bf;
}
项目:lams
文件:DuplicateFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
String fieldName = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
DuplicateFilter df = new DuplicateFilter(fieldName);
String keepMode = DOMUtils.getAttribute(e, "keepMode", "first");
if (keepMode.equalsIgnoreCase("first")) {
df.setKeepMode(DuplicateFilter.KeepMode.KM_USE_FIRST_OCCURRENCE);
} else if (keepMode.equalsIgnoreCase("last")) {
df.setKeepMode(DuplicateFilter.KeepMode.KM_USE_LAST_OCCURRENCE);
} else {
throw new ParserException("Illegal keepMode attribute in DuplicateFilter:" + keepMode);
}
String processingMode = DOMUtils.getAttribute(e, "processingMode", "full");
if (processingMode.equalsIgnoreCase("full")) {
df.setProcessingMode(DuplicateFilter.ProcessingMode.PM_FULL_VALIDATION);
} else if (processingMode.equalsIgnoreCase("fast")) {
df.setProcessingMode(DuplicateFilter.ProcessingMode.PM_FAST_INVALIDATION);
} else {
throw new ParserException("Illegal processingMode attribute in DuplicateFilter:" + processingMode);
}
return df;
}
项目:linden
文件:BooleanFilterConstructor.java
@Override
protected Filter construct(LindenFilter lindenFilter, LindenConfig config) throws Exception {
List<LindenBooleanSubFilter> booleanSubFilterList = lindenFilter.getBooleanFilter().getFilters();
BooleanFilter booleanFilter = new BooleanFilter();
for (LindenBooleanSubFilter booleanSubFilter : booleanSubFilterList) {
LindenFilter subFilter = booleanSubFilter.getFilter();
switch (booleanSubFilter.clause) {
case MUST:
booleanFilter.add(FilterConstructor.constructFilter(subFilter, config), BooleanClause.Occur.MUST);
continue;
case SHOULD:
booleanFilter.add(FilterConstructor.constructFilter(subFilter, config), BooleanClause.Occur.SHOULD);
continue;
case MUST_NOT:
booleanFilter.add(FilterConstructor.constructFilter(subFilter, config), BooleanClause.Occur.MUST_NOT);
}
}
return booleanFilter;
}
项目:linden
文件:FilterConstructor.java
public static Filter constructFilter(LindenFilter lindenFilter, LindenConfig config) throws Exception {
if (lindenFilter == null) {
return null;
}
if (lindenFilter.isSetTermFilter()) {
return TERM_FILTER_CONSTRUCTOR.construct(lindenFilter, config);
} else if (lindenFilter.isSetRangeFilter()) {
return RANGE_FILTER_CONSTRUCTOR.construct(lindenFilter, config);
} else if (lindenFilter.isSetQueryFilter()) {
return QUERY_FILTER_CONSTRUCTOR.construct(lindenFilter, config);
} else if (lindenFilter.isSetBooleanFilter()) {
return BOOLEAN_FILTER_CONSTRUCTOR.construct(lindenFilter, config);
} else if (lindenFilter.isSetSpatialFilter()) {
return SPATIAL_FILTER_CONSTRUCTOR.construct(lindenFilter, config);
} else if (lindenFilter.isSetNotNullFieldFilter()) {
return NOT_NULL_FIELD_FILTER_CONSTRUCTOR.construct(lindenFilter, config);
}
return null;
}
项目:OpenCyclos
文件:Filters.java
/**
* Returns a filter that forces a given field to be one of the given values
*/
public static Filter terms(final String field, final Collection<?> values) {
if (CollectionUtils.isEmpty(values)) {
return null;
}
final TermsFilter filter = new TermsFilter();
int count = 0;
for (final Object object : values) {
final String term = object == null ? null : StringUtils.trimToNull("" + object);
if (term != null) {
/* todo addterm*/
//filter.addTerm(new Term(field, term));
count++;
}
}
return count == 0 ? null : filter;
}
项目:meltwater-elasticsearch-queries
文件:LimitingFilterFactory.java
private Optional<Query> limitingFilter(Query query, boolean isNegated) {
if (query instanceof SpanQuery) {
return limitingFilterForSpan((SpanQuery) query, isNegated);
} else if (query instanceof Filter) {
return Optional.of(query);
} else if (query instanceof BooleanQuery) {
return boolQuery((BooleanQuery) query, isNegated);
} else if (query instanceof TermQuery) {
return Optional.of(query);
} else if (query instanceof PhraseQuery) {
return phraseFilter((PhraseQuery) query, isNegated);
} else if (query instanceof MultiTermQuery) {
return Optional.of(query);
} else if (query instanceof WildcardPhraseQuery) {
return wildcardPhraseFilter((WildcardPhraseQuery) query, isNegated);
} else if (query instanceof ToParentBlockJoinQuery) {
//This can be really bad for performance, if the nested query contains expensive operations (phrases/spans)
//On the other hand, it is only slow if the field actually has any data, and we currently do not have
// any data in the only nested text field (enrichments.sentences)
return Optional.of(query);
} else {
//This should never happen, but if it does, it might be really bad for performance
//logger.warn("failed to limit query, this should never happen. Query : [{}]", query.toString());
return Optional.of(query);
}
}
项目:lucene-geo-gazetteer
文件:GeoNameResolver.java
/**
* Returns a list of location near a certain coordinate.
* @param latitude, @param longitude - Center of search area
* @param distanceInMiles - Search Radius in miles
* @param indexerPath - Path to Lucene index
* @param count - Upper bound to number of results
* @return - List of locations sorted by population
* @throws IOException
*/
public List<Location> searchNearby(Double latitude, Double longitude, Double distanceInMiles, String indexerPath, int count) throws IOException {
double distanceInDeg = DistanceUtils.dist2Degrees(distanceInMiles,DistanceUtils.EARTH_EQUATORIAL_RADIUS_MI);
SpatialArgs spatialArgs = new SpatialArgs(SpatialOperation.IsWithin,
ctx.makeCircle(longitude,latitude, distanceInDeg));
String key = latitude+"-"+longitude;
Filter filter = strategy.makeFilter(spatialArgs);
IndexSearcher searcher = new IndexSearcher(createIndexReader(indexerPath));
Sort sort = new Sort(populationSort);
TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), filter, count, sort);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
HashMap<String, List<Location>> allCandidates = new HashMap<String, List<Location>>();
getMatchingCandidates(searcher, allCandidates, key, scoreDocs);
List<Location> results = allCandidates.get(key);
return results;
}
项目:orientdb-spatial
文件:SpatialQueryBuilderDWithin.java
@Override
public SpatialQueryContext build(Map<String, Object> query) throws Exception {
Shape shape = parseShape(query);
System.out.println("qui:: " + shape);
SpatialStrategy strategy = manager.strategy();
if (isOnlyBB(strategy)) {
shape = shape.getBoundingBox();
}
SpatialArgs args1 = new SpatialArgs(SpatialOperation.IsWithin, shape);
// SpatialArgs args2 = new SpatialArgs(SpatialOperation., shape);
Geometry geo = OShapeFactory.INSTANCE.toGeometry(shape);
Filter filter = strategy.makeFilter(args1);
return new SpatialQueryContext(null, manager.searcher(), new MatchAllDocsQuery(), filter);
}
项目:search
文件:TestNumericRangeFilterBuilder.java
public void testGetFilterHandleNumericParseError() throws Exception {
NumericRangeFilterBuilder filterBuilder = new NumericRangeFilterBuilder();
filterBuilder.setStrictMode(false);
String xml = "<NumericRangeFilter fieldName='AGE' type='int' lowerTerm='-1' upperTerm='NaN'/>";
Document doc = getDocumentFromString(xml);
Filter filter = filterBuilder.getFilter(doc.getDocumentElement());
Directory ramDir = newDirectory();
IndexWriter writer = new IndexWriter(ramDir, newIndexWriterConfig(null));
writer.commit();
try {
AtomicReader reader = SlowCompositeReaderWrapper.wrap(DirectoryReader.open(ramDir));
try {
assertNull(filter.getDocIdSet(reader.getContext(), reader.getLiveDocs()));
}
finally {
reader.close();
}
}
finally {
writer.commit();
writer.close();
ramDir.close();
}
}
项目:search
文件:SpatialFileQueryMaker.java
protected Query makeQueryFromShape(Shape shape) {
SpatialArgs args = new SpatialArgs(operation, shape);
if (!Double.isNaN(distErrPct))
args.setDistErrPct(distErrPct);
if (score) {
ValueSource valueSource = strategy.makeDistanceValueSource(shape.getCenter());
return new CustomScoreQuery(strategy.makeQuery(args), new FunctionQuery(valueSource));
} else {
//strategy.makeQuery() could potentially score (isn't well defined) so instead we call
// makeFilter() and wrap
Filter filter = strategy.makeFilter(args);
if (filter instanceof QueryWrapperFilter) {
return ((QueryWrapperFilter)filter).getQuery();
} else {
return new ConstantScoreQuery(filter);
}
}
}
项目:search
文件:DuplicateFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
String fieldName = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
DuplicateFilter df = new DuplicateFilter(fieldName);
String keepMode = DOMUtils.getAttribute(e, "keepMode", "first");
if (keepMode.equalsIgnoreCase("first")) {
df.setKeepMode(DuplicateFilter.KeepMode.KM_USE_FIRST_OCCURRENCE);
} else if (keepMode.equalsIgnoreCase("last")) {
df.setKeepMode(DuplicateFilter.KeepMode.KM_USE_LAST_OCCURRENCE);
} else {
throw new ParserException("Illegal keepMode attribute in DuplicateFilter:" + keepMode);
}
String processingMode = DOMUtils.getAttribute(e, "processingMode", "full");
if (processingMode.equalsIgnoreCase("full")) {
df.setProcessingMode(DuplicateFilter.ProcessingMode.PM_FULL_VALIDATION);
} else if (processingMode.equalsIgnoreCase("fast")) {
df.setProcessingMode(DuplicateFilter.ProcessingMode.PM_FAST_INVALIDATION);
} else {
throw new ParserException("Illegal processingMode attribute in DuplicateFilter:" + processingMode);
}
return df;
}
项目:search
文件:ChainedFilterTest.java
public void testSingleFilter() throws Exception {
ChainedFilter chain = getChainedFilter(new Filter[] {dateFilter}, null);
int numHits = searcher.search(query, chain, 1000).totalHits;
assertEquals(MAX, numHits);
chain = new ChainedFilter(new Filter[] {bobFilter});
numHits = searcher.search(query, chain, 1000).totalHits;
assertEquals(MAX / 2, numHits);
chain = getChainedFilter(new Filter[] {bobFilter}, new int[] {ChainedFilter.AND});
TopDocs hits = searcher.search(query, chain, 1000);
numHits = hits.totalHits;
assertEquals(MAX / 2, numHits);
assertEquals("bob", searcher.doc(hits.scoreDocs[0].doc).get("owner"));
chain = getChainedFilter(new Filter[] {bobFilter}, new int[] {ChainedFilter.ANDNOT});
hits = searcher.search(query, chain, 1000);
numHits = hits.totalHits;
assertEquals(MAX / 2, numHits);
assertEquals("sue", searcher.doc(hits.scoreDocs[0].doc).get("owner"));
}
项目:search
文件:ChainedFilterTest.java
public void testANDNOT() throws Exception {
ChainedFilter chain = getChainedFilter(
new Filter[]{dateFilter, sueFilter},
new int[] {ChainedFilter.AND, ChainedFilter.ANDNOT});
TopDocs hits = searcher.search(query, chain, 1000);
assertEquals("ANDNOT matches just bob",
MAX / 2, hits.totalHits);
assertEquals("bob", searcher.doc(hits.scoreDocs[0].doc).get("owner"));
chain = getChainedFilter(
new Filter[]{bobFilter, bobFilter},
new int[] {ChainedFilter.ANDNOT, ChainedFilter.ANDNOT});
hits = searcher.search(query, chain, 1000);
assertEquals("ANDNOT bob ANDNOT bob matches all sues",
MAX / 2, hits.totalHits);
assertEquals("sue", searcher.doc(hits.scoreDocs[0].doc).get("owner"));
}
项目:search
文件:ChainedFilterTest.java
public void testWithCachingFilter() throws Exception {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
IndexReader reader = writer.getReader();
writer.close();
IndexSearcher searcher = newSearcher(reader);
Query query = new TermQuery(new Term("none", "none"));
QueryWrapperFilter queryFilter = new QueryWrapperFilter(query);
CachingWrapperFilter cachingFilter = new CachingWrapperFilter(queryFilter);
searcher.search(query, cachingFilter, 1);
CachingWrapperFilter cachingFilter2 = new CachingWrapperFilter(queryFilter);
Filter[] chain = new Filter[2];
chain[0] = cachingFilter;
chain[1] = cachingFilter2;
ChainedFilter cf = new ChainedFilter(chain);
// throws java.lang.ClassCastException: org.apache.lucene.util.OpenBitSet cannot be cast to java.util.BitSet
searcher.search(new MatchAllDocsQuery(), cf, 1);
reader.close();
dir.close();
}
项目:search
文件:TermQueryPrefixTreeStrategy.java
@Override
public Filter makeFilter(SpatialArgs args) {
final SpatialOperation op = args.getOperation();
if (op != SpatialOperation.Intersects)
throw new UnsupportedSpatialOperation(op);
Shape shape = args.getShape();
int detailLevel = grid.getLevelForDistance(args.resolveDistErr(ctx, distErrPct));
List<Cell> cells = grid.getCells(shape, detailLevel,
false,//no parents
true);//simplify
BytesRef[] terms = new BytesRef[cells.size()];
int i = 0;
for (Cell cell : cells) {
terms[i++] = new BytesRef(cell.getTokenString());//TODO use cell.getTokenBytes()
}
return new TermsFilter(getFieldName(), terms);
}
项目:search
文件:TestExpressionSorts.java
public void testQueries() throws Exception {
int n = atLeast(4);
for (int i = 0; i < n; i++) {
Filter odd = new QueryWrapperFilter(new TermQuery(new Term("oddeven", "odd")));
assertQuery(new MatchAllDocsQuery(), null);
assertQuery(new TermQuery(new Term("english", "one")), null);
assertQuery(new MatchAllDocsQuery(), odd);
assertQuery(new TermQuery(new Term("english", "four")), odd);
BooleanQuery bq = new BooleanQuery();
bq.add(new TermQuery(new Term("english", "one")), BooleanClause.Occur.SHOULD);
bq.add(new TermQuery(new Term("oddeven", "even")), BooleanClause.Occur.SHOULD);
assertQuery(bq, null);
// force in order
bq.add(new TermQuery(new Term("english", "two")), BooleanClause.Occur.SHOULD);
bq.setMinimumNumberShouldMatch(2);
assertQuery(bq, null);
}
}
项目:search
文件:TestExpressionSorts.java
void assertQuery(Query query, Filter filter) throws Exception {
for (int i = 0; i < 10; i++) {
boolean reversed = random().nextBoolean();
SortField fields[] = new SortField[] {
new SortField("int", SortField.Type.INT, reversed),
new SortField("long", SortField.Type.LONG, reversed),
new SortField("float", SortField.Type.FLOAT, reversed),
new SortField("double", SortField.Type.DOUBLE, reversed),
new SortField("intdocvalues", SortField.Type.INT, reversed),
new SortField("floatdocvalues", SortField.Type.FLOAT, reversed),
new SortField("score", SortField.Type.SCORE)
};
Collections.shuffle(Arrays.asList(fields), random());
int numSorts = TestUtil.nextInt(random(), 1, fields.length);
assertQuery(query, filter, new Sort(Arrays.copyOfRange(fields, 0, numSorts)));
}
}
项目:irplus
文件:DefaultInstitutionalItemSearchService.java
/**
* Set up the filters for collections - this is for searching within collections.
*
* @param collection - to search within
* @return - created filter
* @throws ParseException
*/
private List<Filter> getCollectionFilters(InstitutionalCollection collection) throws ParseException
{
List<Filter> filters = new LinkedList<Filter>();
//isolate the collection root
Term t = new Term("collection_root_id", NumericUtils.longToPrefixCoded(collection.getTreeRoot().getId()));
Query subQuery = new TermQuery( t );
filters.add(new QueryWrapperFilter(subQuery));
//isolate the range of children
subQuery = NumericRangeQuery.newLongRange("collection_left_value", collection.getLeftValue(), collection.getRightValue(), true, true);
filters.add(new QueryWrapperFilter(subQuery));
return filters;
}
项目:irplus
文件:DefaultResearcherSearchService.java
/**
* Execute the sub query facets and return the search results
* @throws ParseException
* @throws IOException
*/
private List<Filter> getSubQueryFilters( List<FacetFilter> filters,
IndexSearcher searcher) throws ParseException, IOException
{
List<Filter> luceneFilters = new LinkedList<Filter>();
for(FacetFilter filter : filters)
{
if(log.isDebugEnabled())
{
log.debug("adding filter for field " + filter.getField() + " and query " + filter.getQuery());
}
QueryParser subQueryParser = new QueryParser(Version.LUCENE_35, filter.getField(), analyzer);
subQueryParser.setDefaultOperator(QueryParser.AND_OPERATOR);
String fixedQuery = SearchHelper.prepareFacetSearchString(filter.getQuery(), false);
fixedQuery = "\"" + fixedQuery + "\"";
Query subQuery = subQueryParser.parse(fixedQuery);
if(log.isDebugEnabled())
{
log.debug("sub query ing getSubQueryFilters is " + fixedQuery);
}
luceneFilters.add(new QueryWrapperFilter(subQuery));
}
return luceneFilters;
}
项目:search
文件:DrillDownQuery.java
/** Used by DrillSideways */
DrillDownQuery(FacetsConfig config, Filter filter, DrillDownQuery other) {
query = new BooleanQuery(true); // disable coord
BooleanClause[] clauses = other.query.getClauses();
if (clauses.length == other.drillDownDims.size()) {
throw new IllegalArgumentException("cannot apply filter unless baseQuery isn't null; pass ConstantScoreQuery instead");
}
assert clauses.length == 1+other.drillDownDims.size(): clauses.length + " vs " + (1+other.drillDownDims.size());
drillDownDims.putAll(other.drillDownDims);
query.add(new FilteredQuery(clauses[0].getQuery(), filter), Occur.MUST);
for(int i=1;i<clauses.length;i++) {
query.add(clauses[i].getQuery(), Occur.MUST);
}
this.config = config;
}
项目:search
文件:DrillDownQuery.java
/** Expert: add a custom drill-down Filter, e.g. when
* drilling down after range faceting. */
public void add(String dim, Filter subFilter) {
if (drillDownDims.containsKey(dim)) {
throw new IllegalArgumentException("dimension \"" + dim + "\" already has a drill-down");
}
// TODO: we should use FilteredQuery?
// So scores of the drill-down query don't have an
// effect:
final ConstantScoreQuery drillDownQuery = new ConstantScoreQuery(subFilter);
drillDownQuery.setBoost(0.0f);
query.add(drillDownQuery, Occur.MUST);
drillDownDims.put(dim, drillDownDims.size());
}
项目:search
文件:DrillSideways.java
/**
* Search, sorting by {@link Sort}, and computing
* drill down and sideways counts.
*/
public DrillSidewaysResult search(DrillDownQuery query,
Filter filter, FieldDoc after, int topN, Sort sort, boolean doDocScores,
boolean doMaxScore) throws IOException {
if (filter != null) {
query = new DrillDownQuery(config, filter, query);
}
if (sort != null) {
int limit = searcher.getIndexReader().maxDoc();
if (limit == 0) {
limit = 1; // the collector does not alow numHits = 0
}
topN = Math.min(topN, limit);
final TopFieldCollector hitCollector = TopFieldCollector.create(sort,
topN,
after,
true,
doDocScores,
doMaxScore,
true);
DrillSidewaysResult r = search(query, hitCollector);
return new DrillSidewaysResult(r.facets, hitCollector.topDocs());
} else {
return search(after, query, topN);
}
}
项目:search
文件:TermsFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
List<BytesRef> terms = new ArrayList<>();
String text = DOMUtils.getNonBlankTextOrFail(e);
String fieldName = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
TokenStream ts = null;
try {
ts = analyzer.tokenStream(fieldName, text);
TermToBytesRefAttribute termAtt = ts.addAttribute(TermToBytesRefAttribute.class);
BytesRef bytes = termAtt.getBytesRef();
ts.reset();
while (ts.incrementToken()) {
termAtt.fillBytesRef();
terms.add(BytesRef.deepCopyOf(bytes));
}
ts.end();
}
catch (IOException ioe) {
throw new RuntimeException("Error constructing terms from index:" + ioe);
} finally {
IOUtils.closeWhileHandlingException(ts);
}
return new TermsFilter(fieldName, terms);
}
项目:search
文件:BooleanFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
BooleanFilter bf = new BooleanFilter();
NodeList nl = e.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
if (node.getNodeName().equals("Clause")) {
Element clauseElem = (Element) node;
BooleanClause.Occur occurs = BooleanQueryBuilder.getOccursValue(clauseElem);
Element clauseFilter = DOMUtils.getFirstChildOrFail(clauseElem);
Filter f = factory.getFilter(clauseFilter);
bf.add(new FilterClause(f, occurs));
}
}
return bf;
}
项目:lams
文件:FilterBuilderFactory.java
@Override
public Filter getFilter(Element n) throws ParserException {
FilterBuilder builder = builders.get(n.getNodeName());
if (builder == null) {
throw new ParserException("No FilterBuilder defined for node " + n.getNodeName());
}
return builder.getFilter(n);
}
项目:lams
文件:NumericRangeFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
String field = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
String lowerTerm = DOMUtils.getAttributeOrFail(e, "lowerTerm");
String upperTerm = DOMUtils.getAttributeOrFail(e, "upperTerm");
boolean lowerInclusive = DOMUtils.getAttribute(e, "includeLower", true);
boolean upperInclusive = DOMUtils.getAttribute(e, "includeUpper", true);
int precisionStep = DOMUtils.getAttribute(e, "precisionStep", NumericUtils.PRECISION_STEP_DEFAULT);
String type = DOMUtils.getAttribute(e, "type", "int");
try {
Filter filter;
if (type.equalsIgnoreCase("int")) {
filter = NumericRangeFilter.newIntRange(field, precisionStep, Integer
.valueOf(lowerTerm), Integer.valueOf(upperTerm), lowerInclusive,
upperInclusive);
} else if (type.equalsIgnoreCase("long")) {
filter = NumericRangeFilter.newLongRange(field, precisionStep, Long
.valueOf(lowerTerm), Long.valueOf(upperTerm), lowerInclusive,
upperInclusive);
} else if (type.equalsIgnoreCase("double")) {
filter = NumericRangeFilter.newDoubleRange(field, precisionStep, Double
.valueOf(lowerTerm), Double.valueOf(upperTerm), lowerInclusive,
upperInclusive);
} else if (type.equalsIgnoreCase("float")) {
filter = NumericRangeFilter.newFloatRange(field, precisionStep, Float
.valueOf(lowerTerm), Float.valueOf(upperTerm), lowerInclusive,
upperInclusive);
} else {
throw new ParserException("type attribute must be one of: [long, int, double, float]");
}
return filter;
} catch (NumberFormatException nfe) {
if (strictMode) {
throw new ParserException("Could not parse lowerTerm or upperTerm into a number", nfe);
}
return NO_MATCH_FILTER;
}
}
项目:lams
文件:RangeFilterBuilder.java
@Override
public Filter getFilter(Element e) throws ParserException {
String fieldName = DOMUtils.getAttributeWithInheritance(e, "fieldName");
String lowerTerm = e.getAttribute("lowerTerm");
String upperTerm = e.getAttribute("upperTerm");
boolean includeLower = DOMUtils.getAttribute(e, "includeLower", true);
boolean includeUpper = DOMUtils.getAttribute(e, "includeUpper", true);
return TermRangeFilter.newStringRange(fieldName, lowerTerm, upperTerm, includeLower, includeUpper);
}
项目:lams
文件:FilteredQueryBuilder.java
@Override
public Query getQuery(Element e) throws ParserException {
Element filterElement = DOMUtils.getChildByTagOrFail(e, "Filter");
filterElement = DOMUtils.getFirstChildOrFail(filterElement);
Filter f = filterFactory.getFilter(filterElement);
Element queryElement = DOMUtils.getChildByTagOrFail(e, "Query");
queryElement = DOMUtils.getFirstChildOrFail(queryElement);
Query q = queryFactory.getQuery(queryElement);
FilteredQuery fq = new FilteredQuery(q, f);
fq.setBoost(DOMUtils.getAttribute(e, "boost", 1.0f));
return fq;
}
项目:Elasticsearch
文件:ChildrenQuery.java
public ChildrenQuery(ParentChildIndexFieldData ifd, String parentType, String childType, Filter parentFilter, Query childQuery, ScoreType scoreType, int minChildren, int maxChildren, int shortCircuitParentDocSet, BitSetProducer nonNestedDocsFilter) {
this.ifd = ifd;
this.parentType = parentType;
this.childType = childType;
this.parentFilter = parentFilter;
this.childQuery = childQuery;
this.scoreType = scoreType;
this.shortCircuitParentDocSet = shortCircuitParentDocSet;
this.nonNestedDocsFilter = nonNestedDocsFilter;
assert maxChildren == 0 || minChildren <= maxChildren;
this.minChildren = minChildren > 1 ? minChildren : 0;
this.maxChildren = maxChildren;
}
项目:Elasticsearch
文件:ChildrenQuery.java
protected ParentWeight(Query query, Weight childWeight, Filter parentFilter, long remaining, ParentCollector collector, int minChildren, int maxChildren) {
super(query);
this.childWeight = childWeight;
this.parentFilter = parentFilter;
this.remaining = remaining;
this.collector = collector;
this.minChildren = minChildren;
this.maxChildren = maxChildren;
}
项目:Elasticsearch
文件:ParentQuery.java
private ChildWeight(Query query, Weight parentWeight, Filter childrenFilter, ParentOrdAndScoreCollector collector, IndexParentChildFieldData globalIfd) {
super(query);
this.parentWeight = parentWeight;
this.childrenFilter = childrenFilter;
this.parentIdxs = collector.parentIdxs;
this.scores = collector.scores;
this.globalIfd = globalIfd;
}
项目:Elasticsearch
文件:ChildrenConstantScoreQuery.java
public ChildrenConstantScoreQuery(IndexParentChildFieldData parentChildIndexFieldData, Query childQuery, String parentType, String childType, Filter parentFilter, int shortCircuitParentDocSet, BitSetProducer nonNestedDocsFilter) {
this.parentChildIndexFieldData = parentChildIndexFieldData;
this.parentFilter = parentFilter;
this.parentType = parentType;
this.childType = childType;
this.childQuery = childQuery;
this.shortCircuitParentDocSet = shortCircuitParentDocSet;
this.nonNestedDocsFilter = nonNestedDocsFilter;
}
项目:Elasticsearch
文件:ChildrenConstantScoreQuery.java
@Override
public Weight doCreateWeight(IndexSearcher searcher, boolean needsScores) throws IOException {
SearchContext sc = SearchContext.current();
IndexParentChildFieldData globalIfd = parentChildIndexFieldData.loadGlobal((DirectoryReader)searcher.getIndexReader());
final long valueCount;
List<LeafReaderContext> leaves = searcher.getIndexReader().leaves();
if (globalIfd == null || leaves.isEmpty()) {
return new BooleanQuery.Builder().build().createWeight(searcher, needsScores);
} else {
AtomicParentChildFieldData afd = globalIfd.load(leaves.get(0));
SortedDocValues globalValues = afd.getOrdinalsValues(parentType);
valueCount = globalValues.getValueCount();
}
if (valueCount == 0) {
return new BooleanQuery.Builder().build().createWeight(searcher, needsScores);
}
ParentOrdCollector collector = new ParentOrdCollector(globalIfd, valueCount, parentType);
searcher.search(childQuery, collector);
final long remaining = collector.foundParents();
if (remaining == 0) {
return new BooleanQuery.Builder().build().createWeight(searcher, needsScores);
}
Filter shortCircuitFilter = null;
if (remaining <= shortCircuitParentDocSet) {
shortCircuitFilter = ParentIdsFilter.createShortCircuitFilter(
nonNestedDocsFilter, sc, parentType, collector.values, collector.parentOrds, remaining
);
}
return new ParentWeight(this, parentFilter, globalIfd, shortCircuitFilter, collector, remaining);
}
项目:Elasticsearch
文件:ChildrenConstantScoreQuery.java
public ParentWeight(Query query, Filter parentFilter, IndexParentChildFieldData globalIfd, Filter shortCircuitFilter, ParentOrdCollector collector, long remaining) {
super(query);
this.parentFilter = parentFilter;
this.globalIfd = globalIfd;
this.shortCircuitFilter = shortCircuitFilter;
this.collector = collector;
this.remaining = remaining;
}
项目:linden
文件:LindenResultParser.java
public LindenResultParser(LindenConfig config, LindenSearchRequest request,
IndexSearcher indexSearcher, LindenSnippetGenerator snippetGenerator, Query query,
Filter filter, Sort sort) {
this.config = config;
this.request = request;
this.indexSearcher = indexSearcher;
this.snippetGenerator = snippetGenerator;
this.query = query;
this.filter = filter;
this.sort = sort;
this.sortScoreFieldPos = getSortScoreFieldPos(sort);
this.leaves = indexSearcher.getIndexReader().leaves();
}
项目:linden
文件:NotNullFieldFilterConstructor.java
@Override
protected Filter construct(LindenFilter lindenFilter, LindenConfig config) throws Exception {
LindenNotNullFieldFilter lindenNotNullFieldFilter = lindenFilter.getNotNullFieldFilter();
NotNullFieldFilter notNullFieldFilter = new NotNullFieldFilter(lindenNotNullFieldFilter.getField());
if (!lindenNotNullFieldFilter.isReverse()) {
return notNullFieldFilter;
}
BooleanFilter booleanFilter = new BooleanFilter();
booleanFilter.add(notNullFieldFilter, BooleanClause.Occur.MUST_NOT);
return booleanFilter;
}
项目:linden
文件:SpatialFilterConstructor.java
@Override
protected Filter construct(LindenFilter lindenFilter, LindenConfig config) throws IOException {
LindenSpatialFilter spatialFilter = lindenFilter.getSpatialFilter();
SpatialArgs spatialArgs = new SpatialArgs(
SpatialOperation.Intersects,
spatialContext.makeCircle(
spatialFilter.getSpatialParam().coordinate.getLongitude(),
spatialFilter.getSpatialParam().coordinate.getLatitude(),
DistanceUtils
.dist2Degrees(spatialFilter.getSpatialParam().getDistanceRange(), DistanceUtils.EARTH_MEAN_RADIUS_KM)));
return spatialStrategy.makeFilter(spatialArgs);
}
项目:linden
文件:TestLindenCore.java
@Test
public void testFlexibleFilter() throws Exception {
String bql = "select name from linden where flexible_query is 'qq音乐' full_match in (name^1.5) \n"
+ "USING MODEL test \n"
+ "begin\n"
+ " return score();\n"
+ "end\n"
+ "order by score,id limit $offset, $length source";
LindenSearchRequest request = bqlCompiler.compile(bql).getSearchRequest();
Filter filter = FilterConstructor.constructFilter(request.getFilter(), lindenConfig);
Assert.assertEquals("QueryWrapperFilter(FlexibleQuery([name^1.5]:[qq,音,乐]fullMatch))", filter.toString());
bql = "select name from linden \n"
+ "by flexible_query is \"lucene\" in (title^1.2) \n"
+ "USING MODEL test1 \n"
+ "begin \n"
+ " return score() + 1;\n"
+ "end\n"
+ "where flexible_query is 'ddd' full_match in (field1)\n"
+ "USING MODEL filter_func begin return 1f; end \n"
+ "order by score,id limit $offset, $length source";
request = bqlCompiler.compile(bql).getSearchRequest();
LindenResult result = lindenCore.search(request);
Assert.assertEquals(1, result.getHitsSize());
Assert.assertEquals(1f, result.getHits().get(0).getScore(), DELTA5);
Assert.assertEquals("4", result.getHits().get(0).getId());
}