Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade Querqy #10

Merged
merged 3 commits into from
Jan 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

:dependencies
[[org.clojure/clojure "1.11.1"]
[org.querqy/querqy-core "3.12.0"]]
[org.querqy/querqy-core "3.16.0"]]

:repl-options {:init-ns com.nytimes.querqy}

Expand Down
88 changes: 68 additions & 20 deletions src/com/nytimes/querqy/commonrules.clj
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,45 @@
[com.nytimes.querqy.model :as model]
[com.nytimes.querqy.parser :as parser])
(:import
(java.io Reader)
(java.net URL)
(java.util List UUID)
(querqy.model Input Input$BooleanInput Input$SimpleInput)
(querqy.parser QuerqyParser)
(querqy.rewrite RewriterFactory)
(querqy.rewrite.commonrules CommonRulesRewriter LineParser QuerqyParserFactory SimpleCommonRulesParser WhiteSpaceQuerqyParserFactory)
(querqy.rewrite.commonrules.model BoostInstruction BoostInstruction$BoostDirection DeleteInstruction FilterInstruction Instructions SynonymInstruction TrieMapRulesCollectionBuilder)
(querqy.rewrite.commonrules.select SelectionStrategyFactory)
(querqy.rewrite.commonrules.select.booleaninput BooleanInputParser)
(querqy.rewrite.commonrules.select.booleaninput.model BooleanInputElement BooleanInputElement$Type BooleanInputLiteral)))
(java.io
Reader)
(java.net
URL)
(java.util
List
UUID)
(querqy.model
Input
Input$BooleanInput
Input$SimpleInput)
(querqy.parser
QuerqyParser)
(querqy.rewrite
RewriterFactory)
(querqy.rewrite.commonrules
CommonRulesRewriter
LineParser
QuerqyParserFactory
SimpleCommonRulesParser
WhiteSpaceQuerqyParserFactory)
(querqy.rewrite.commonrules.model
BoostInstruction
BoostInstruction$BoostDirection
BoostInstruction$BoostMethod
DeleteInstruction
FilterInstruction
InstructionDescription
Instructions
SynonymInstruction
TrieMapRulesCollectionBuilder)
(querqy.rewrite.commonrules.select
SelectionStrategyFactory)
(querqy.rewrite.commonrules.select.booleaninput
BooleanInputParser)
(querqy.rewrite.commonrules.select.booleaninput.model
BooleanInputElement
BooleanInputElement$Type
BooleanInputLiteral)))

(set! *warn-on-reflection* true)

Expand Down Expand Up @@ -62,7 +90,8 @@
^Reader stream
^boolean boolean-input
^QuerqyParserFactory parser
^boolean ignore-case)]
^boolean ignore-case
BoostInstruction$BoostMethod/ADDITIVE)]
(.parse rules-parser))))

(extend-protocol CommonRulesRewriterBuilder
Expand All @@ -77,6 +106,15 @@

(defrecord Rule [input instructions])

(defn- description
^InstructionDescription
[& {:keys [^String type, param, ^String value]}]
(cond-> (InstructionDescription/builder)
(some? type) (.typeName type)
(some? param) (.param param)
(some? value) (.value value)
:finally (.build)))

(defn match*
"Create a "
[head & tail]
Expand Down Expand Up @@ -113,7 +151,9 @@

(defn delete
[string]
(DeleteInstruction. (parse-string string)))
(DeleteInstruction.
(parse-string string)
(description {:type "delete", :value string})))

(defn synonym?
[obj]
Expand All @@ -122,9 +162,12 @@
(defn synonym
"Create a synonym instruction."
([string]
(SynonymInstruction. (parse-string string)))
(synonym 1.0 string))
([boost string]
(SynonymInstruction. (parse-string string) boost)))
(SynonymInstruction.
(parse-string string)
boost
(description {:type "synonym", :param boost, :value string}))))

(defn boost
"Boost a matching term or query."
Expand All @@ -133,14 +176,19 @@
(throw (IllegalArgumentException. "Cannot boost by 0")))
(let [UP BoostInstruction$BoostDirection/UP
DOWN BoostInstruction$BoostDirection/DOWN]
(BoostInstruction. (parse-query query)
(if (>= boost 0) UP DOWN)
(abs boost))))
(BoostInstruction.
(parse-query query)
(if (>= boost 0) UP DOWN)
BoostInstruction$BoostMethod/ADDITIVE
(abs boost)
(description {:type "boost", :param boost, :value (pr-str query)}))))

(defn filter
"Add a filter to the query."
[query]
(FilterInstruction. (parse-query query)))
(FilterInstruction.
(parse-query query)
(description {:type "filter", :value (pr-str query)})))

;;; match impl

Expand Down Expand Up @@ -204,4 +252,4 @@
(.addRule rules-builder input literal)))

;;
(rewriter-factory (.build rules-builder)))))
(rewriter-factory (.build rules-builder)))))
7 changes: 3 additions & 4 deletions src/com/nytimes/querqy/context.clj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(ns com.nytimes.querqy.context
(:import
(java.util Optional)
(querqy.rewrite SearchEngineRequestAdapter)))
(querqy.rewrite RewriteLoggingConfig SearchEngineRequestAdapter)))

(defn optional
([] (Optional/empty))
Expand All @@ -18,12 +18,11 @@
(getFloatRequestParam [_ k] (some-> (get params k) float optional))
(getDoubleRequestParam [_ k] (some-> (get params k) double optional))
(isDebugQuery [_] debug?)
(getInfoLoggingContext [_] (optional)))
(getRewriteLoggingConfig [_] (RewriteLoggingConfig/off)))

(def empty-context
(map->Context
{:chain []
:debug? false
:params {}
:context {}}))

:context {}}))
2 changes: 1 addition & 1 deletion src/com/nytimes/querqy/model.clj
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@
:or {boost-up []
boost-down []
filter []}}]
(ExpandedQuery. query filter boost-up boost-down))
(ExpandedQuery. query filter boost-up boost-down []))

(defn expanded?
[obj]
Expand Down
10 changes: 5 additions & 5 deletions src/com/nytimes/querqy/protocols.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[com.nytimes.querqy.context :as context])
(:import
(querqy.model ExpandedQuery Query)
(querqy.rewrite ContextAwareQueryRewriter RewriteChain RewriterFactory SearchEngineRequestAdapter)))
(querqy.rewrite QueryRewriter RewriteChain RewriterFactory SearchEngineRequestAdapter)))

(defprotocol Parser
(parse ^Query [this ^String string]
Expand All @@ -21,19 +21,19 @@
;; Some default Rewriter implementations for the Querqy classes.

(extend-protocol Rewriter
ContextAwareQueryRewriter
QueryRewriter
(rewrite
([this query]
(rewrite this query context/empty-context))
([this query context]
(.rewrite this query context)))
(some-> (.rewrite this query context) (.getExpandedQuery))))

RewriteChain
(rewrite
([this query]
(rewrite this query context/empty-context))
([this query context]
(.rewrite this query context)))
(some-> (.rewrite this query context) (.getExpandedQuery))))

RewriterFactory
(rewrite
Expand All @@ -47,4 +47,4 @@

(defprotocol Emitter
(emit [this query opts]
"Emit a system-specific query for a given `querqy.model.ExpandedQuery`"))
"Emit a system-specific query for a given `querqy.model.ExpandedQuery`"))