[
https://issues.apache.org/jira/browse/SOLR-9279?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15366318#comment-15366318
]
ASF GitHub Bot commented on SOLR-9279:
--------------------------------------
Github user dsmiley commented on a diff in the pull request:
https://github.com/apache/lucene-solr/pull/49#discussion_r69935281
--- Diff:
lucene/queries/src/java/org/apache/lucene/queries/function/valuesource/ComparisonValueSource.java
---
@@ -0,0 +1,104 @@
+package org.apache.lucene.queries.function.valuesource;
+
+/*
+ * 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.
+ */
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.queries.function.ValueSource;
+import org.apache.lucene.queries.function.FunctionValues;
+import org.apache.lucene.queries.function.docvalues.BoolDocValues;
+import org.apache.lucene.search.IndexSearcher;
+
+
+/**
+ * Base class for comparison operators used within if statements
+ * To Solr's if function query a 0 is considered "false", all other values
are "true"
+ */
+public abstract class ComparisonValueSource extends BoolFunction {
+
+ private final ValueSource lhs;
+ private final ValueSource rhs;
+ private final String name;
+
+ public ComparisonValueSource(ValueSource lhs, ValueSource rhs, String
name) {
+ this.lhs = lhs;
+ this.rhs = rhs;
+ this.name = name;
+ }
+
+ // Perform the comparison, returning true or false
+ public abstract boolean compare(double lhs, double rhs);
+
+ // Uniquely identify the operation (ie "gt", "lt" "gte", etc)
+ public String name() {
+ return this.name;
+ }
+
+ // string comparison? Probably should be a seperate function
+ // public abstract boolean compareString(String lhs, String rhs);
+
+ public FunctionValues getValues(Map context, LeafReaderContext
readerContext) throws IOException {
+ final FunctionValues lhsVal = this.lhs.getValues(context,
readerContext);
+ final FunctionValues rhsVal = this.rhs.getValues(context,
readerContext);
+ final String compLabel = this.name();
+
+ return new BoolDocValues(this) {
+ @Override
+ public boolean boolVal(int doc) {
+ return compare(lhsVal.floatVal(doc), rhsVal.floatVal(doc));
--- End diff --
Can you instead pass lhsVal & rhsVal to let the compare() function choose
if it wants to call floatVal, doubleVal, or longVal or whatever?
> Add greater than, less than, etc in Solr function queries
> ---------------------------------------------------------
>
> Key: SOLR-9279
> URL: https://issues.apache.org/jira/browse/SOLR-9279
> Project: Solr
> Issue Type: New Feature
> Security Level: Public(Default Security Level. Issues are Public)
> Components: search
> Reporter: Doug Turnbull
> Fix For: master (7.0)
>
>
> If you use the "if" function query, you'll often expect to be able to use
> greater than/less than functions. For example, you might want to boost books
> written in the past 7 years. Unfortunately, there's no "greater than"
> function query that will return non-zero when the lhs > rhs. Instead to get
> this, you need to create really awkward function queries like I do here
> (http://opensourceconnections.com/blog/2014/11/26/stepwise-date-boosting-in-solr/):
> if(min(0,sub(ms(mydatefield),sub(ms(NOW),315569259747))),0.8,1)
> The pull request attached to this Jira adds the following function queries
> (https://github.com/apache/lucene-solr/pull/49)
> -gt(lhs, rhs) (returns 1 if lhs > rhs, 0 otherwise)
> -lt(lhs, rhs) (returns 1 if lhs < rhs, 0 otherwise)
> -gte
> -lte
> -eq
> So instead of
> if(min(0,sub(ms(mydatefield),sub(ms(NOW),315569259747))),0.8,1)
> one could now write
> if(lt(ms(mydatefield),315569259747,0.8,1)
> (if mydatefield < 315569259747 then 0.8 else 1)
> A bit more readable and less puzzling
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]