blob: e8c41008a390031981f3a1680da20a6949fdf2f3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.luke.models.search;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.luke.models.LukeException;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
/**
* A dedicated interface for Luke's Search tab.
*/
public interface Search {
/**
* Returns all field names in this index.
*/
Collection<String> getFieldNames();
/**
* Returns field names those are sortable.
*/
Collection<String> getSortableFieldNames();
/**
* Returns field names those are searchable.
*/
Collection<String> getSearchableFieldNames();
/**
* Returns field names those are searchable by range query.
*/
Collection<String> getRangeSearchableFieldNames();
/**
* Returns the current query.
*/
Query getCurrentQuery();
/**
* Parses the specified query expression with given configurations.
*
* @param expression - query expression
* @param defField - default field for the query
* @param analyzer - analyzer for parsing query expression
* @param config - query parser configuration
* @param rewrite - if true, re-written query is returned
* @return parsed query
* @throws LukeException - if an internal error occurs when accessing index
*/
Query parseQuery(String expression, String defField, Analyzer analyzer, QueryParserConfig config, boolean rewrite);
/**
* Creates the MoreLikeThis query for the specified document with given configurations.
*
* @param docid - document id
* @param mltConfig - MoreLikeThis configuration
* @param analyzer - analyzer for analyzing the document
* @return MoreLikeThis query
* @throws LukeException - if an internal error occurs when accessing index
*/
Query mltQuery(int docid, MLTConfig mltConfig, Analyzer analyzer);
/**
* Searches this index by the query with given configurations.
*
* @param query - search query
* @param simConfig - similarity configuration
* @param fieldsToLoad - field names to load
* @param pageSize - page size
* @param exactHitsCount - if set to true, the exact total hits count is returned.
* @return search results
* @throws LukeException - if an internal error occurs when accessing index
*/
SearchResults search(Query query, SimilarityConfig simConfig, Set<String> fieldsToLoad, int pageSize, boolean exactHitsCount);
/**
* Searches this index by the query with given sort criteria and configurations.
*
* @param query - search query
* @param simConfig - similarity configuration
* @param sort - sort criteria
* @param fieldsToLoad - fields to load
* @param pageSize - page size
* @param exactHitsCount - if set to true, the exact total hits count is returned.
* @return search results
* @throws LukeException - if an internal error occurs when accessing index
*/
SearchResults search(Query query, SimilarityConfig simConfig, Sort sort, Set<String> fieldsToLoad, int pageSize, boolean exactHitsCount);
/**
* Returns the next page for the current query.
*
* @return search results, or empty if there are no more results
* @throws LukeException - if an internal error occurs when accessing index
*/
Optional<SearchResults> nextPage();
/**
* Returns the previous page for the current query.
*
* @return search results, or empty if there are no more results.
* @throws LukeException - if an internal error occurs when accessing index
*/
Optional<SearchResults> prevPage();
/**
* Explains the document for the specified query.
*
* @param query - query
* @param docid - document id to be explained
* @return explanations
* @throws LukeException - if an internal error occurs when accessing index
*/
Explanation explain(Query query, int docid);
/**
* Returns possible {@link SortField}s for the specified field.
*
* @param name - field name
* @return list of possible sort types
* @throws LukeException - if an internal error occurs when accessing index
*/
List<SortField> guessSortTypes(String name);
/**
* Returns the {@link SortField} for the specified field with the sort type and order.
*
* @param name - field name
* @param type - string representation for a type
* @param reverse - if true, descending order is used
* @return sort type, or empty if the type is incompatible with the field
* @throws LukeException - if an internal error occurs when accessing index
*/
Optional<SortField> getSortType(String name, String type, boolean reverse);
}