• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java Builder类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中org.apache.lucene.search.BooleanQuery.Builder的典型用法代码示例。如果您正苦于以下问题:Java Builder类的具体用法?Java Builder怎么用?Java Builder使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



Builder类属于org.apache.lucene.search.BooleanQuery包,在下文中一共展示了Builder类的16个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: findPosts

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
private List<Post> findPosts() {
	try {
		FullTextSession fullTextSession = getFullTextSession((Session) entityManager.getDelegate());
		Builder builder = new Builder();
		String[] fields = new String[] { "message.text", "topic.subject" };
		MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
		builder.add(parser.parse(POST_TEXT), MUST);
		builder.add(new TermQuery(new Term("topic.forum.id", "0")), MUST);
		builder.add(new TermQuery(new Term("topic.forum.category.id", "0")), MUST);
		builder.add(new WildcardQuery(new Term("poster.userId", "root")), MUST);
		addPostTimeQuery(builder);
		FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), Post.class);
		fullTextQuery.setSort(getSort());
		fullTextQuery.setFirstResult(0);
		fullTextQuery.setMaxResults(15);
		@SuppressWarnings("unchecked")
		List<Post> posts = fullTextQuery.list();
		return posts;
	} catch (ParseException e) {
		logger.severe("error");
		return null;
	}
}
 
开发者ID:PacktPublishing,项目名称:Mastering-Java-EE-Development-with-WildFly,代码行数:24,代码来源:SearchTestCase.java


示例2: buildKeywordsQuery

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
private Query buildKeywordsQuery(String keywords, Query trackFilter) {
    Builder builder = new BooleanQuery.Builder();

    if ("*".equals(keywords)) {
        builder.add(new WildcardQuery(new Term(TrackField.KEYWORDS.name(), keywords)), BooleanClause.Occur.MUST);
    } else {
        // Split into whole words with the last word having
        // a wildcard '*' on the end
        for (StringTokenizer tokens = new StringTokenizer(keywords, " "); tokens.hasMoreTokens();) {
            String token = tokens.nextToken();

            if (tokens.hasMoreElements()) {
                builder.add(new TermQuery(new Term(TrackField.KEYWORDS.name(), token)), BooleanClause.Occur.MUST);
            } else {
                builder.add(new WildcardQuery(new Term(TrackField.KEYWORDS.name(), (token + "*"))),
                    BooleanClause.Occur.MUST);
            }
        }
    }

    if (trackFilter != null) {
        builder.add(trackFilter, BooleanClause.Occur.MUST);
    }

    return builder.build();
}
 
开发者ID:mpcontracting,项目名称:rpmjukebox,代码行数:27,代码来源:SearchManager.java


示例3: addCommonConstraints

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
void addCommonConstraints(Builder indexQuery, Query query) {
  // BooleanQuery categoryQueries = new BooleanQuery();
  Builder categoryQueriesBuilder = new BooleanQuery.Builder();
  for (String category : query.getCategories()) {
    categoryQueriesBuilder.add(new TermQuery(new Term(Concept.CATEGORY, category)), Occur.SHOULD);
  }
  if (!query.getCategories().isEmpty()) {
    indexQuery.add(new BooleanClause(categoryQueriesBuilder.build(), Occur.MUST));
  }

  // BooleanQuery prefixQueries = new BooleanQuery();
  Builder prefixQueriesBuilder = new BooleanQuery.Builder();
  for (String curie : query.getPrefixes()) {
    String prefix = curieUtil.getExpansion(curie);
    prefixQueriesBuilder.add(new WildcardQuery(new Term(CommonProperties.IRI, prefix + "*")),
        Occur.SHOULD);
  }
  if (!query.getPrefixes().isEmpty()) {
    indexQuery.add(new BooleanClause(prefixQueriesBuilder.build(), Occur.MUST));
  }
}
 
开发者ID:SciGraph,项目名称:SciGraph,代码行数:22,代码来源:VocabularyNeo4jImpl.java


示例4: testFilterCaching

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@SuppressWarnings("serial")
@Test
public void testFilterCaching() throws Throwable {
    for (int i=0; i<10; i++) {
        final int j = i;
        addDocument(lucene, "id:" + i, null, new HashMap<String, String>() {{put("field" + j, "value0");}});
    }
    final Builder b = new BooleanQuery.Builder();
    for (int i=0; i<100; i++)
        b.add(new TermQuery(new Term("field" + i, "value0")), Occur.SHOULD);
    final BooleanQuery query = b.build();
    LuceneResponse response = lucene.executeQuery(new QueryData(), Arrays.asList(query), null, null, null, null);
    for (int i =0; i <10; i++)
        lucene.executeQuery(new QueryData(), Arrays.asList(query), null, null, null, null);
    LuceneResponse responseWithCaching = lucene.executeQuery(new QueryData(), Arrays.asList(query), null, null, null, null);
    assertTrue(responseWithCaching.queryTime < response.queryTime);
}
 
开发者ID:seecr,项目名称:meresco-lucene,代码行数:18,代码来源:LuceneTest.java


示例5: addPostTimeQuery

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
private void addPostTimeQuery(Builder query) {
	Calendar calendar = getInstance();
	Date endDate = calendar.getTime();
	calendar.add(DATE, -1);
	Date startDate = calendar.getTime();
	query.add(newLongRange("createDate", startDate.getTime(), endDate.getTime(), true, true), MUST);
}
 
开发者ID:PacktPublishing,项目名称:Mastering-Java-EE-Development-with-WildFly,代码行数:8,代码来源:SearchTestCase.java


示例6: searchConcepts

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@Override
public List<Concept> searchConcepts(Query query) {
  QueryParser parser = getQueryParser();
  // BooleanQuery finalQuery = new BooleanQuery();
  Builder finalQueryBuilder = new BooleanQuery.Builder();
  try {
    if (query.isIncludeSynonyms() || query.isIncludeAbbreviations() || query.isIncludeAcronyms()) {
      // BooleanQuery subQuery = new BooleanQuery();
      Builder subQueryBuilder = new BooleanQuery.Builder();
      subQueryBuilder.add(LuceneUtils.getBoostedQuery(parser, query.getInput(), 10.0f),
          Occur.SHOULD);
      String escapedQuery = QueryParser.escape(query.getInput());
      if (query.isIncludeSynonyms()) {
        subQueryBuilder.add(parser.parse(Concept.SYNONYM + ":" + escapedQuery), Occur.SHOULD);
      }
      if (query.isIncludeAbbreviations()) {
        subQueryBuilder.add(parser.parse(Concept.ABREVIATION + ":" + escapedQuery), Occur.SHOULD);
      }
      if (query.isIncludeAcronyms()) {
        subQueryBuilder.add(parser.parse(Concept.ACRONYM + ":" + escapedQuery), Occur.SHOULD);
      }
      finalQueryBuilder.add(subQueryBuilder.build(), Occur.MUST);
    } else {
      finalQueryBuilder.add(parser.parse(query.getInput()), Occur.MUST);
    }
  } catch (ParseException e) {
    logger.log(Level.WARNING, "Failed to parse query", e);
  }
  addCommonConstraints(finalQueryBuilder, query);
  IndexHits<Node> hits = null;
  BooleanQuery finalQuery = finalQueryBuilder.build();

  try (Transaction tx = graph.beginTx()) {
    hits = graph.index().getNodeAutoIndexer().getAutoIndex().query(finalQuery);
    tx.success();
  }
  return limitHits(hits, query);
}
 
开发者ID:SciGraph,项目名称:SciGraph,代码行数:39,代码来源:VocabularyNeo4jImpl.java


示例7: getTermsQuery

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
/**
 * Creates a term filter for a set of terms.
 * @param terms some terms
 * @param mustMatchAll if true all terms must match ('AND' operation)
 * @return the filter
 */
static Query getTermsQuery(Map<String, ?> terms, boolean mustMatchAll) {
	BooleanQuery.Builder fb = new BooleanQuery.Builder();
	int addedTerms = 0;
	boolean noop = true;
	Query bfb = null;

	for (Map.Entry<String, ?> term : terms.entrySet()) {
		Object val = term.getValue();
		if (!StringUtils.isBlank(term.getKey()) && val != null) {
			Matcher matcher = Pattern.compile(".*(<|>|<=|>=)$").matcher(term.getKey().trim());
			bfb = new TermQuery(new Term(term.getKey(), val.toString()));
			if (matcher.matches() && val instanceof Number) {
				String key = term.getKey().replaceAll("[<>=\\s]+$", "");

				if (">".equals(matcher.group(1))) {
					bfb = TermRangeQuery.newStringRange(key, val.toString(), null, false, false);
				} else if ("<".equals(matcher.group(1))) {
					bfb = TermRangeQuery.newStringRange(key, null, val.toString(), false, false);
				} else if (">=".equals(matcher.group(1))) {
					bfb = TermRangeQuery.newStringRange(key, val.toString(), null, true, false);
				} else if ("<=".equals(matcher.group(1))) {
					bfb = TermRangeQuery.newStringRange(key, null, val.toString(), false, true);
				}
			}
			if (mustMatchAll) {
				fb.add(bfb, BooleanClause.Occur.MUST);
			} else {
				fb.add(bfb, BooleanClause.Occur.SHOULD);
			}
			addedTerms++;
			noop = false;
		}
	}
	if (addedTerms == 1 && bfb != null) {
		return bfb;
	}
	return noop ? null : fb.build();
}
 
开发者ID:Erudika,项目名称:para,代码行数:45,代码来源:LuceneUtils.java


示例8: findByIds

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@Override
public <P extends ParaObject> List<P> findByIds(String appid, List<String> ids) {
	if (ids == null || ids.isEmpty()) {
		return Collections.emptyList();
	}
	BooleanQuery.Builder fb = new BooleanQuery.Builder();
	for (String id : ids) {
		if (!StringUtils.isBlank(id)) {
			fb.add(new TermQuery(new Term(Config._ID, id)), BooleanClause.Occur.SHOULD);
		}
	}
	return searchQuery(dao, appid, null, fb.build(), new Pager(ids.size()));
}
 
开发者ID:Erudika,项目名称:para,代码行数:14,代码来源:LuceneSearch.java


示例9: findTagged

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@Override
public <P extends ParaObject> List<P> findTagged(String appid, String type, String[] tags, Pager... pager) {
	if (tags == null || tags.length == 0 || StringUtils.isBlank(appid)) {
		return Collections.emptyList();
	}
	Builder query = new BooleanQuery.Builder();
	//assuming clean & safe tags here
	for (String tag : tags) {
		query.add(new TermQuery(new Term(Config._TAGS, tag)), BooleanClause.Occur.MUST);
	}
	// The filter looks like this: ("tag1" OR "tag2" OR "tag3") AND "type"
	return searchQuery(dao, appid, type, query.build(), pager);
}
 
开发者ID:Erudika,项目名称:para,代码行数:14,代码来源:LuceneSearch.java


示例10: getCount

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@Override
public Long getCount(String appid, String type, Map<String, ?> terms) {
	if (StringUtils.isBlank(appid) || terms == null || terms.isEmpty()) {
		return 0L;
	}
	Query query = getTermsQuery(terms, true);
	if (query != null && !StringUtils.isBlank(type)) {
		query = new BooleanQuery.Builder().
				add(query, BooleanClause.Occur.MUST).
				add(new TermQuery(new Term(Config._TYPE, type)), BooleanClause.Occur.FILTER).
				build();
	}
	return (long) count(appid, query);
}
 
开发者ID:Erudika,项目名称:para,代码行数:15,代码来源:LuceneSearch.java


示例11: testBoostQuery

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@Test
public void testBoostQuery() throws Throwable {
    Document doc1 = new Document();
    doc1.add(new TextField("fieldA", "Dit is veld a", Store.NO));
    doc1.add(new TextField("fieldB", "This is field b", Store.NO));
    lucene.addDocument("id:1", doc1);
    Document doc2 = new Document();
    doc2.add(new TextField("fieldA", "This is field a", Store.NO));
    doc2.add(new TextField("fieldB", "Dit is veld b", Store.NO));
    lucene.addDocument("id:2", doc2);

    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    builder.add(new BoostQuery(new TermQuery(new Term("fieldA", "field")), 200), Occur.SHOULD);
    builder.add(new BoostQuery(new TermQuery(new Term("fieldB", "field")), 0.2f), Occur.SHOULD);

    LuceneResponse response = lucene.executeQuery(builder.build());
    assertEquals(2, response.hits.size());
    assertEquals("id:2", response.hits.get(0).id);
    assertEquals("id:1", response.hits.get(1).id);

    builder = new BooleanQuery.Builder();
    builder.add(new BoostQuery(new TermQuery(new Term("fieldA", "field")), 0.2f), Occur.SHOULD);
    builder.add(new BoostQuery(new TermQuery(new Term("fieldB", "field")), 200), Occur.SHOULD);

    response = lucene.executeQuery(builder.build());
    assertEquals(2, response.hits.size());
    assertEquals("id:1", response.hits.get(0).id);
    assertEquals("id:2", response.hits.get(1).id);
}
 
开发者ID:seecr,项目名称:meresco-lucene,代码行数:30,代码来源:LuceneTest.java


示例12: getConceptsFromPrefix

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@Override
public List<Concept> getConceptsFromPrefix(Query query) {
  QueryParser parser = getQueryParser();
  // BooleanQuery finalQuery = new BooleanQuery();
  Builder finalQueryBuilder = new BooleanQuery.Builder();
  try {
    // BooleanQuery subQuery = new BooleanQuery();
    Builder subQueryBuilder = new BooleanQuery.Builder();
    subQueryBuilder.add(parser.parse(formatQuery("%s%s:%s*", NodeProperties.LABEL,
        LuceneUtils.EXACT_SUFFIX, query.getInput())), Occur.SHOULD);
    Optional<String> fullUri = curieUtil.getIri(query.getInput());
    if (fullUri.isPresent()) {
      subQueryBuilder.add(
          parser.parse(formatQuery("%s:%s*", NodeProperties.IRI, (fullUri.get()))), Occur.SHOULD);
    }

    if (query.isIncludeSynonyms()) {
      subQueryBuilder.add(
          parser.parse(formatQuery("%s%s:%s*", Concept.SYNONYM, LuceneUtils.EXACT_SUFFIX,
              query.getInput())), Occur.SHOULD);
    }
    if (query.isIncludeAbbreviations()) {
      subQueryBuilder.add(parser.parse(formatQuery("%s%s:%s*", Concept.ABREVIATION,
          LuceneUtils.EXACT_SUFFIX, query.getInput())), Occur.SHOULD);
    }
    if (query.isIncludeAcronyms()) {
      subQueryBuilder.add(
          parser.parse(formatQuery("%s%s:%s*", Concept.ACRONYM, LuceneUtils.EXACT_SUFFIX,
              query.getInput())), Occur.SHOULD);
    }

    finalQueryBuilder.add(subQueryBuilder.build(), Occur.MUST);
  } catch (ParseException e) {
    logger.log(Level.WARNING, "Failed to parse query", e);
  }
  addCommonConstraints(finalQueryBuilder, query);
  BooleanQuery finalQuery = finalQueryBuilder.build();
  IndexHits<Node> hits = null;
  try (Transaction tx = graph.beginTx()) {
    hits = graph.index().getNodeAutoIndexer().getAutoIndex().query(finalQuery);
    tx.success();
  }
  return limitHits(hits, query);

}
 
开发者ID:SciGraph,项目名称:SciGraph,代码行数:46,代码来源:VocabularyNeo4jImpl.java


示例13: getConceptsFromTerm

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
@Override
public List<Concept> getConceptsFromTerm(Query query) {
  QueryParser parser = getQueryParser();
  // String exactQuery = String.format("\"\\^ %s $\"", query.getInput());
  String exactQuery = String.format("\"\\^ %s $\"", query.getInput());
  Builder finalQueryBuilder = new BooleanQuery.Builder();
  try {
    if (query.isIncludeSynonyms() || query.isIncludeAbbreviations() || query.isIncludeAcronyms()) {
      Builder subQueryBuilder = new BooleanQuery.Builder();
      // subQuery.add(LuceneUtils.getBoostedQuery(parser, exactQuery, 10.0f), Occur.SHOULD);
      subQueryBuilder.add(LuceneUtils.getBoostedQuery(parser, exactQuery, 10.0f), Occur.SHOULD);
      if (query.isIncludeSynonyms()) {
        // subQuery.add(parser.parse(Concept.SYNONYM + ":" + exactQuery), Occur.SHOULD);
        subQueryBuilder.add(parser.parse(Concept.SYNONYM + ":" + exactQuery), Occur.SHOULD);
      }
      if (query.isIncludeAbbreviations()) {
        // subQuery.add(parser.parse(Concept.ABREVIATION + ":" + exactQuery), Occur.SHOULD);
        subQueryBuilder.add(parser.parse(Concept.ABREVIATION + ":" + exactQuery), Occur.SHOULD);
      }
      if (query.isIncludeAcronyms()) {
        // subQuery.add(parser.parse(Concept.ACRONYM + ":" + exactQuery), Occur.SHOULD);
        subQueryBuilder.add(parser.parse(Concept.ACRONYM + ":" + exactQuery), Occur.SHOULD);
      }
      // finalQuery.add(subQuery, Occur.MUST);
      finalQueryBuilder.add(subQueryBuilder.build(), Occur.MUST);
    } else {
      // finalQuery.add(parser.parse(exactQuery), Occur.MUST);
      finalQueryBuilder.add(parser.parse(exactQuery), Occur.MUST);
    }
  } catch (ParseException e) {
    logger.log(Level.WARNING, "Failed to parse query", e);
  }
  addCommonConstraints(finalQueryBuilder, query);
  BooleanQuery finalQuery = finalQueryBuilder.build();
  logger.finest(finalQuery.toString());
  try (Transaction tx = graph.beginTx()) {
    IndexHits<Node> hits = graph.index().getNodeAutoIndexer().getAutoIndex().query(finalQuery);
    tx.success();
    return limitHits(hits, query);
  }
}
 
开发者ID:SciGraph,项目名称:SciGraph,代码行数:42,代码来源:VocabularyNeo4jImpl.java


示例14: getPhraseFieldQueries

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
protected Optional<Query> getPhraseFieldQueries()  {

      // sloppy phrase queries for proximity
      final List<FieldParams> allPhraseFields = bmaxquery.getAllPhraseFields();

      if (!allPhraseFields.isEmpty()) {

         final List<BmaxTerm> bmaxTerms = bmaxquery.getTerms();

         if (bmaxTerms.size() > 1) { // it's a phrase

            final List<CharSequence> terms = bmaxTerms.stream().map(BmaxTerm::getTerm).collect(Collectors.toList());
            final List<Query> disjuncts = new LinkedList<>();

            final QueryBuilder queryBuilder = new QueryBuilder(schema.getQueryAnalyzer());

            // memoization of phrase shingles
            final Map<Integer, List<String>> shingles = new HashMap<>(2);

            // build phrase queries for the phrase query fields
            for (final FieldParams fieldParams : allPhraseFields) {

               final int phraseLength = fieldParams.getWordGrams();
               final int slop = fieldParams.getSlop();
               final String fieldname = fieldParams.getField();

               // get/create field-independent bi-gram or tri-gram strings
               final List<String> shinglesN = shingles.computeIfAbsent(phraseLength, n -> buildNGrams(terms, n));

               // map bi-gram/tri-gram strings to phrase queries
               final List<Query> nGramQueries = shinglesN.stream()
                       .map(nGram ->  queryBuilder.createPhraseQuery(fieldname, nGram, slop))
                       .filter(Objects::nonNull)
                       .collect(Collectors.toList());

               switch (nGramQueries.size()) {
                  case 0: break;
                  case 1: {
                     disjuncts.add(withBoostFactor(nGramQueries.get(0), fieldParams.getBoost()));
                     break;
                  }
                  default:
                     // If we have > 1 n-gram phrase for this field, aggregate their scores using
                     // a BooleanQuery with all clauses being optional
                     final BooleanQuery.Builder builder = new BooleanQuery.Builder()
                             .setMinimumNumberShouldMatch(1);

                     for (final Query nGramQuery : nGramQueries) {
                        builder.add(nGramQuery, BooleanClause.Occur.SHOULD);
                     }

                     disjuncts.add(withBoostFactor(builder.build(), fieldParams.getBoost()));
               }
            }

            switch (disjuncts.size()) {
               case 0: break;
               case 1: return Optional.of(disjuncts.get(0));
               default :
                  return Optional.of(new DisjunctionMaxQuery(disjuncts, bmaxquery.getPhraseBoostTieBreaker()));
            }
         }
      }

      return empty();
   }
 
开发者ID:shopping24,项目名称:solr-bmax-queryparser,代码行数:67,代码来源:BmaxLuceneQueryBuilder.java


示例15: searchGeoQuery

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
/**
 * Geopoint distance query. Finds objects located near a center point.
 * @param <P> object type
 * @param dao {@link DAO}
 * @param appid appid
 * @param type object type to search for
 * @param query a geopoint query
 * @param queryString query string for filtering results
 * @param pager a {@link Pager}
 * @return a list of ParaObjects
 */
public static <P extends ParaObject> List<P> searchGeoQuery(DAO dao, String appid, String type,
		Query query, String queryString, Pager... pager) {
	if (StringUtils.isBlank(type) || StringUtils.isBlank(appid)) {
		return Collections.emptyList();
	}
	if (StringUtils.isBlank(queryString)) {
		queryString = "*";
	}
	DirectoryReader ireader = null;
	try {
		Pager page = getPager(pager);
		ireader = getIndexReader(appid);
		if (ireader != null) {
			Document[] hits1 = searchQueryRaw(ireader, appid, Utils.type(Address.class), query, page);
			page.setLastKey(null); // will cause problems if not cleared

			if (hits1.length == 0) {
				return Collections.emptyList();
			}

			if (type.equals(Utils.type(Address.class))) {
				return searchQuery(dao, appid, hits1, page);
			}

			// then searchQuery their parent objects
			ArrayList<String> parentids = new ArrayList<>(hits1.length);
			for (Document doc : hits1) {
				Address address = documentToParaObject(doc);
				if (address != null && !StringUtils.isBlank(address.getParentid())) {
					parentids.add(address.getParentid());
				}
			}

			Builder qsPart = new BooleanQuery.Builder();
			qsPart.add(qs(queryString, MultiFields.getIndexedFields(ireader)), BooleanClause.Occur.MUST);
			Builder filterIdsPart = new BooleanQuery.Builder();
			for (String id : parentids) {
				filterIdsPart.add(new TermQuery(new Term(Config._ID, id)), BooleanClause.Occur.SHOULD);
			}
			qsPart.add(filterIdsPart.build(), BooleanClause.Occur.FILTER);
			Document[] hits2 = searchQueryRaw(ireader, appid, type, qsPart.build(), page);
			return searchQuery(dao, appid, hits2, page);
		}
	} catch (Exception e) {
		logger.error(null, e);
	} finally {
		closeIndexReader(ireader);
	}
	return Collections.emptyList();
}
 
开发者ID:Erudika,项目名称:para,代码行数:62,代码来源:LuceneUtils.java


示例16: searchWildcard

import org.apache.lucene.search.BooleanQuery.Builder; //导入依赖的package包/类
/**
 * Search where we return if any of the given strings appear.
 *
 * Accepts wildcard in queries
 */
public SearchResult searchWildcard(OrderedMap<String, Set<String>> fieldNameToValues, boolean applyAllDeletes,
        IDocumentsVisitor visitor, Map<String, String> translateFields, String... fieldsToLoad)
        throws IOException {
    Builder booleanQueryBuilder = new BooleanQuery.Builder();
    Set<Entry<String, Set<String>>> entrySet = fieldNameToValues.entrySet();
    for (Entry<String, Set<String>> entry : entrySet) {
        Builder fieldQueryBuilder = new BooleanQuery.Builder();
        String fieldName = entry.getKey();
        if (translateFields != null) {
            String newFieldName = translateFields.get(fieldName);
            if (newFieldName != null) {
                fieldName = newFieldName;
            }
        }
        boolean allNegate = true;
        for (String s : entry.getValue()) {
            if (s.length() == 0) {
                throw new RuntimeException("Unable to create term for searching empty string.");
            }
            boolean negate = false;
            if (s.startsWith("!")) {
                // Negation if dealing with paths
                if (IFields.FIELDS_NEGATED_WITH_EXCLAMATION.contains(fieldName)) {
                    s = s.substring(1);
                    negate = true;
                }
            }
            if (s.length() == 0) {
                // Only a single '!' for the negate.
                continue;
            }
            if (s.indexOf('*') != -1 || s.indexOf('?') != -1) {
                if (StringUtils.containsOnlyWildCards(s)) {
                    throw new RuntimeException("Unable to create term for searching only wildcards: " + s);
                }
                fieldQueryBuilder.add(new WildcardQuery(new Term(fieldName, s)),
                        negate ? BooleanClause.Occur.MUST_NOT : BooleanClause.Occur.SHOULD);

            } else {
                fieldQueryBuilder.add(new TermQuery(new Term(fieldName, s)),
                        negate ? BooleanClause.Occur.MUST_NOT : BooleanClause.Occur.SHOULD);
            }
            if (!negate) {
                allNegate = false;
            }
        }
        BooleanQuery transitiveQuery = fieldQueryBuilder.build();
        if (transitiveQuery.clauses().size() != 0) {
            if (allNegate) {
                // If all are negations, we actually have to add one which would
                // match all to remove the negations.
                fieldQueryBuilder.add(new MatchAllDocsQuery(), BooleanClause.Occur.SHOULD);
            }
            booleanQueryBuilder.add(fieldQueryBuilder.build(), BooleanClause.Occur.MUST);
        }
    }
    BooleanQuery booleanQuery = booleanQueryBuilder.build();
    if (DEBUG) {
        System.out.println("Searching: " + booleanQuery);
    }
    return search(booleanQuery, applyAllDeletes, visitor, fieldsToLoad);
}
 
开发者ID:fabioz,项目名称:Pydev,代码行数:68,代码来源:IndexApi.java



注:本文中的org.apache.lucene.search.BooleanQuery.Builder类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java GenericSettings类代码示例发布时间:2022-05-22
下一篇:
Java ClassicSimilarity类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap