Package org.fao.geonet.kernel.search

Examples of org.fao.geonet.kernel.search.SearchManager$TermFrequency


   * @throws CorruptIndexException
   */
  public List<String> getAllUuids(int maxHits, ServiceContext context) throws Exception {

    GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);
    SearchManager sm = gc.getBean(SearchManager.class);
    LuceneConfig luceneConfig = getLuceneConfig();
        IndexAndTaxonomy indexAndTaxonomy = sm.getIndexReader(null, _searchToken);

        try {
            Log.debug(Geonet.CSW_SEARCH, "Found searcher with " + indexAndTaxonomy.version + " comparing with " + _searchToken);
            if (indexAndTaxonomy.version != _searchToken && !(!luceneConfig.useNRTManagerReopenThread() || Boolean.parseBoolean(System.getProperty(LuceneConfig.USE_NRT_MANAGER_REOPEN_THREAD)))) {
                throw new SearchExpiredEx("Search has expired/timed out - start a new search");
            }
            GeonetworkMultiReader _reader = indexAndTaxonomy.indexReader;
            Pair<TopDocs, Element> searchResults = LuceneSearcher.doSearchAndMakeSummary(maxHits, 0, maxHits, _lang.presentationLanguage,
                    luceneConfig.getTaxonomy().get(ResultType.RESULTS.toString()), luceneConfig.getTaxonomyConfiguration(),
                    _reader, _query, wrapSpatialFilter(), _sort, null, false,
                    luceneConfig.isTrackDocScores(), luceneConfig.isTrackMaxScore(), luceneConfig.isDocsScoredInOrder());
            TopDocs tdocs = searchResults.one();
            Element summary = searchResults.two();

            int numHits = Integer.parseInt(summary.getAttributeValue("count"));

            if (Log.isDebugEnabled(Geonet.CSW_SEARCH))
                Log.debug(Geonet.CSW_SEARCH, "Records matched : " + numHits);

            // --- retrieve results
            List<String> response = new ArrayList<String>();

            for (ScoreDoc sdoc : tdocs.scoreDocs) {
                Document doc = _reader.document(sdoc.doc, _uuidselector);
                String uuid = doc.get("_uuid");
                if (uuid != null)
                    response.add(uuid);
            }
            return response;
        } finally {
      sm.releaseIndexReader(indexAndTaxonomy);
    }
  }
View Full Code Here


      // Set propertyName in any case.
      Element pn = new Element("PropertyName", Csw.NAMESPACE_CSW);
      domainValues.addContent(pn.setText(property));
     
      GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);
      SearchManager sm = gc.getBean(SearchManager.class);
     

          IndexAndTaxonomy indexAndTaxonomy= sm.getNewIndexReader(null);
      try {
          GeonetworkMultiReader reader = indexAndTaxonomy.indexReader;
        BooleanQuery groupsQuery = (BooleanQuery) CatalogSearcher.getGroupsQuery(context);
                BooleanQuery query = null;

                // Apply CSW service specific constraint
                if (StringUtils.isNotEmpty(cswServiceSpecificConstraint)) {
                    Query constraintQuery = CatalogSearcher.getCswServiceSpecificConstraintQuery(cswServiceSpecificConstraint, luceneConfig);

                    query = new BooleanQuery();

                    BooleanClause.Occur occur = LuceneUtils
                            .convertRequiredAndProhibitedToOccur(true, false);

                    query.add(groupsQuery, occur);
                    query.add(constraintQuery, occur);

                } else {
                    query = groupsQuery;
                }

        List<Pair<String, Boolean>> sortFields = Collections.singletonList(Pair.read(Geonet.SearchResult.SortBy.RELEVANCE, true));
                Sort   sort = LuceneSearcher.makeSort(sortFields, context.getLanguage(), false);
        CachingWrapperFilter filter = null;

        Pair<TopDocs,Element> searchResults = LuceneSearcher.doSearchAndMakeSummary(
            maxRecords, 0, maxRecords, context.getLanguage(),
            null, luceneConfig.getTaxonomyConfiguration(), reader,
            query, filter, sort, null, false, false,
            false, false  // Scoring is useless for GetDomain operation
        );
        TopDocs hits = searchResults.one();
     
        try {
          // Get mapped lucene field in CSW configuration
          String indexField = catalogConfig.getFieldMapping().get(
              property.toLowerCase());
          if (indexField != null)
            property = indexField;
 
          // check if params asked is in the index using getFieldNames ?
          @SuppressWarnings("resource")
                    FieldInfos fi = SlowCompositeReaderWrapper.wrap(reader).getFieldInfos();
          if (fi.fieldInfo(property) == null)
            continue;
         
          boolean isRange = false;
          if (catalogConfig.getGetRecordsRangeFields().contains(
              property))
            isRange = true;
         
          if (isRange)
            listOfValues = new Element("RangeOfValues", Csw.NAMESPACE_CSW);
          else 
            listOfValues = new Element("ListOfValues", Csw.NAMESPACE_CSW);

          Set<String> fields = new HashSet<String>();
          fields.add(property);
          fields.add("_isTemplate");
         
 
          // parse each document in the index
          String[] fieldValues;
                    Collator stringCollator = Collator.getInstance();
                    stringCollator.setStrength(Collator.PRIMARY);
                    SortedSet<String> sortedValues = new TreeSet<String>(stringCollator);
          ObjectKeyIntOpenHashMap duplicateValues = new ObjectKeyIntOpenHashMap();
          for (int j = 0; j < hits.scoreDocs.length; j++) {
              DocumentStoredFieldVisitor selector = new DocumentStoredFieldVisitor(fields);
            reader.document(hits.scoreDocs[j].doc, selector);
            Document doc = selector.getDocument();

            // Skip templates and subTemplates
            String[] isTemplate = doc.getValues("_isTemplate");
            if (isTemplate[0] != null && !isTemplate[0].equals("n"))
              continue;
           
            // Get doc values for specified property
            fieldValues = doc.getValues(property);
            if (fieldValues == null)
              continue;
           
            addtoSortedSet(sortedValues, fieldValues, duplicateValues);
          }
         
          SummaryComparator valuesComparator = new SummaryComparator(SortOption.FREQUENCY, Type.STRING, context.getLanguage(), null);
          TreeSet<SummaryComparator.SummaryElement> sortedValuesFrequency = new TreeSet<SummaryComparator.SummaryElement>(valuesComparator);
                    ObjectKeyIntMapIterator entries = duplicateValues.entries();
                   
                    while(entries.hasNext()) {
                        entries.next();
                        sortedValuesFrequency.add(new SummaryComparator.SummaryElement(entries));
                    }
         
          if (freq)
            return createValuesByFrequency(sortedValuesFrequency);
          else
            listOfValues.addContent(createValuesElement(sortedValues, isRange));
         
        } finally {
          // any children means that the catalog was unable to determine
          // anything about the specified parameter
          if (listOfValues!= null && listOfValues.getChildren().size() != 0)
            domainValues.addContent(listOfValues);
 
          // Add current DomainValues to the list
          domainValuesList.add(domainValues);
        }
      } finally {
        sm.releaseIndexReader(indexAndTaxonomy);
      }
    }
    return domainValuesList;
   
  }
View Full Code Here

                sortFields.add(Pair.read(field, "DESC".equals(order)));
            }
        }
       
        GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);
        SearchManager sm = gc.getBean(SearchManager.class);
        boolean requestedLanguageOnTop = sm.getSettingInfo().getRequestedLanguageOnTop();

        String preferredLanguage = LuceneSearcher.determineLanguage(context, request, sm.getSettingInfo()).presentationLanguage;

        // we always want to keep the relevancy as part of the sorting mechanism
    return LuceneSearcher.makeSort(sortFields, preferredLanguage, requestedLanguageOnTop);
  }
View Full Code Here

        if(Log.isDebugEnabled(Geonet.CSW_SEARCH)) {
            Log.debug(Geonet.CSW_SEARCH, "CatS performsearch: filterXpr:\n"+ Xml.getString(filterExpr));
        }

    GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);
    SearchManager sm = gc.getBean(SearchManager.class);

    if (luceneExpr != null) {
            if(Log.isDebugEnabled(Geonet.CSW_SEARCH))
                Log.debug(Geonet.CSW_SEARCH, "Search criteria:\n" + Xml.getString(luceneExpr));
        }
        else {
            if(Log.isDebugEnabled(Geonet.CSW_SEARCH))
                Log.debug(Geonet.CSW_SEARCH, "## Search criteria: null");
        }


    boolean requestedLanguageOnTop = sm.getSettingInfo().getRequestedLanguageOnTop();
   
        Query data;
        LuceneConfig luceneConfig = getLuceneConfig();
        if (luceneExpr == null) {
            data = null;
            Log.info(Geonet.CSW_SEARCH, "LuceneSearcher made null query");
        } else {
            PerFieldAnalyzerWrapper analyzer = SearchManager.getAnalyzer(_lang.analyzerLanguage, true);
            SettingInfo.SearchRequestLanguage requestedLanguageOnly = sm.getSettingInfo().getRequestedLanguageOnly();
            data = LuceneSearcher.makeLocalisedQuery(luceneExpr,
                analyzer, luceneConfig, _lang.presentationLanguage, requestedLanguageOnly);
            Log.info(Geonet.CSW_SEARCH, "LuceneSearcher made query:\n" + data.toString());
        }

        Query cswCustomFilterQuery = null;
        Log.info(Geonet.CSW_SEARCH,"LuceneSearcher cswCustomFilter:\n" + cswServiceSpecificContraint);
        if (StringUtils.isNotEmpty(cswServiceSpecificContraint)) {
            cswCustomFilterQuery = getCswServiceSpecificConstraintQuery(cswServiceSpecificContraint, luceneConfig);
            Log.info(Geonet.CSW_SEARCH,"LuceneSearcher cswCustomFilterQuery:\n" + cswCustomFilterQuery);
        }

    Query groups = getGroupsQuery(context);
    if (sort == null) {
      List<Pair<String, Boolean>> fields = Collections.singletonList(Pair.read(Geonet.SearchResult.SortBy.RELEVANCE, true));
            sort = LuceneSearcher.makeSort(fields, _lang.presentationLanguage, requestedLanguageOnTop);
    }

    // --- put query on groups in AND with lucene query

    BooleanQuery query = new BooleanQuery();

    // FIXME : DO I need to fix that here ???
    // BooleanQuery.setMaxClauseCount(1024); // FIXME : using MAX_VALUE
    // solve
    // // partly the org.apache.lucene.search.BooleanQuery$TooManyClauses
    // // problem.
    // // Improve index content.

    BooleanClause.Occur occur = LuceneUtils.convertRequiredAndProhibitedToOccur(true, false);
    if (data != null) {
      query.add(data, occur);
        }
    query.add(groups, occur);

        if (cswCustomFilterQuery != null) {
            query.add(cswCustomFilterQuery, occur);
        }

    // --- proper search
        if(Log.isDebugEnabled(Geonet.CSW_SEARCH))
            Log.debug(Geonet.CSW_SEARCH, "Lucene query: " + query.toString());

        int numHits = startPosition + maxRecords;

        updateRegionsInSpatialFilter(context, filterExpr);
    // TODO Handle NPE creating spatial filter (due to constraint)
        _filter = sm.getSpatial().filter(query, Integer.MAX_VALUE, filterExpr, filterVersion);
       
        boolean buildSummary = resultType == ResultType.RESULTS_WITH_SUMMARY;
        // get as many results as instructed or enough for search summary
        if (buildSummary) {
            numHits = Math.max(maxHitsInSummary, numHits);
View Full Code Here

        return new HealthCheck("Lucene Index") {
            @Override
            protected Result check() throws Exception {
                GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);

                SearchManager searchMan = gc.getBean(SearchManager.class);


                IndexAndTaxonomy indexAndTaxonomy= searchMan.getNewIndexReader(null);
                GeonetworkMultiReader reader = indexAndTaxonomy.indexReader;
                try {
                    Query query = new MatchAllDocsQuery();
                    TopDocs hits = new IndexSearcher(reader).search(query, 1);
                    if (hits.totalHits > 1) {
                        return Result.healthy();
                    } else {
                        return Result.unhealthy("Lucene search for 1 record returned " + hits.totalHits + " hits.");
                    }
                } catch (Throwable e) {
                    return Result.unhealthy(e);
                } finally {
                    searchMan.releaseIndexReader(indexAndTaxonomy);
                }
            }
        };
    }
View Full Code Here

        return new HealthCheck("Metadata Index Errors") {
            @Override
            protected Result check() throws Exception {
                GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);

                SearchManager searchMan = gc.getBean(SearchManager.class);

                IndexAndTaxonomy indexAndTaxonomy= searchMan.getNewIndexReader(null);
                GeonetworkMultiReader reader = indexAndTaxonomy.indexReader;
                try {
                    TermQuery indexError = new TermQuery(new Term("_indexingError", "1"));
                    TopDocs hits = new IndexSearcher(reader).search(indexError, 1);
                    if (hits.totalHits > 0) {
                        return Result.unhealthy("Found "+hits.totalHits+" metadata that had errors during indexing");
                    } else {
                        return Result.healthy();
                    }
                } catch (Throwable e) {
                    return Result.unhealthy(e);
                } finally {
                    searchMan.releaseIndexReader(indexAndTaxonomy);
                }
            }
        };
    }
View Full Code Here

TOP

Related Classes of org.fao.geonet.kernel.search.SearchManager$TermFrequency

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.