我正在尝试使用同义词过滤器来搜索短语。
peter=> spider man, spiderman, Mary Jane, .....
Run Code Online (Sandbox Code Playgroud)
我使用默认配置。当我把这些同义词成synonym.txt,然后重新启动Solr的似乎只有部分工作:它开始搜索"spider","man","spiderman","Mary"和"Jane",但我要搜索的是有意义的组合是什么-样"spider man","Mary Jane"和"spiderman"。
首先,我有一个像这样的Mysql表:
create table t (id int(11) PRIMARY KEY unsigned NOT NULL AUTO_INCREMENT, name varchar(20), age int(10));
我定义了一个在t中创建一行的函数:
(require '[honeysql.core :as sql])
(defn do-something []
(sql/query {:insert-into :t
:values [{:name "name1" :age 10}]})
(> 3 (rand-int 5)))
Run Code Online (Sandbox Code Playgroud)
现在我想运行这个函数,直到它返回true但最多N次.
这段take-times代码是错误的,因为repeat将eval do-something函数一次,然后构造惰性序列.
(defn take-times []
(some true? (repeat 5 (do-something))))
Run Code Online (Sandbox Code Playgroud)
无论返回什么,这take-times2将减少do-something5次do-something.
(defn take-times2 []
(some true? (for [i (range 5)]
(do-something))))
Run Code Online (Sandbox Code Playgroud)
如果我不使用递归函数和宏,我该怎么办?
我理解apply如何在一个像这样的简单表达式中工作:
(apply + '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
在我正在阅读的书中,我遇到了一个更复杂的例子.
(def make
(fn [class & args]
(let [seeded {:__class_symbol__ (:__own_symbol__ class)}
constructor (:add-instance-values (:__instance_methods__ class))]
(apply constructor seeded args))))
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,seeded是一个map,args是一个ArraySeq.
任何人都可以解释在这种情况下如何应用?
如何将多个函数(每个函数生成一个映射)应用于一个公共参数,然后合并所有结果?这可以改进吗?
(merge {} (podr root) (version root) (year root) (month root))
Run Code Online (Sandbox Code Playgroud)
其中root是公共参数podr,version、year和month是函数。