1

申し訳ありませんが、私は Lucene の初心者です。
複数のフィールドを持つドキュメントをインデックスに追加しました

Document doc = new Document();
doc.add(new TextField("productName", productName, Field.Store.YES));
doc.add(new FloatField("price", Float.parseFloat(price), Field.Store.YES));
//+additional fields

商品を検索し、価格帯で絞り込みたい。これらの結果にフィルターを適用する方法を誰か教えてもらえますか?

String[] queryStrings = {searchTerm}; 
String[] fields = {"itemName"}; //might query multiple fields in future
try {
    Query q = MultiFieldQueryParser.parse(luceneVersion, queryStrings, fields, analyzer); // assuming I might want to search additional fields like description in the future
    IndexReader reader = DirectoryReader.open(indexDirectory);
    IndexSearcher searcher = new IndexSearcher(reader);
    TopDocs td = searcher.search(q, to);

    // Not sure how to filter here, I eventually will want to save these results for pagination 

} catch (Exception e){
    e.printStackTrace();
}
4

2 に答える 2

1

NumericRangeQueryを追加して、それを の最初のクエリと組み合わせることを考えましたBooleanQueryか? を使用してそれらを組み合わせることができますMUST

于 2013-11-07T18:00:32.610 に答える
0

フィールドの検索と範囲フィルターを組み合わせるという同様の要件がありました。私は次のコードで終わった

Set<String> fieldSet = Sets.newHashSet();
        fieldSet.add(rangeQueryField);

        BooleanQuery fieldsQuery = new BooleanQuery();
        for (String field : fields) {
            fieldSet.add(field);
            WildcardQuery queryPart = new WildcardQuery(new Term(field, queryText));
            fieldsQuery.add(queryPart, Occur.SHOULD);
        }

        BooleanQuery query = new BooleanQuery();
        query.add(fieldsQuery, Occur.MUST);

        NumericRangeFilter<Long> longNumericRangeFilter = NumericRangeFilter.newLongRange(rangeQueryField, rangeValue, Long.MAX_VALUE, false, false);
        MultiFieldQueryParser queryParser = new MultiFieldQueryParser(version, fieldSet.toArray(new String[0]), analyzer);
        queryParser.setAllowLeadingWildcard(true);

        Query q = queryParser.parse(query.toString());
        TopFieldDocs searchResults = searcher.search(q, longNumericRangeFilter, maxResultsToReturn, sort);
于 2014-03-24T21:05:28.047 に答える