我有一个接受用户免费文本搜索的应用程序。假设用户在html输入文本中写“一二三”,所以我的搜索URI是“... / solr / my_index / select?q =表达式:(一二三)......”。
文档在架构中描述如下:
<field name="id" type="int" indexed="true" stored="true" required="true" />
<field name="expressions" type="text_general" indexed="true" stored="true" multiValued="true" />
在“my_index”中,我有两个索引的文件:
id:“1”,表达方式:[“七一二三四五”,“七八七”,“二六九六”]
id:“2”,表达式:[“one”,“one two”,“one two four”,“four one two one”]
查询的结果是文档id = 2得分更高,因为单词“one”和“two”的匹配更多。但我有更具体的要求:SCORE必须考虑不匹配计数,但“搜索短语中的相似性”。所以,因为文件id = 1的值为“七一二三四”,其中“..一二三......”子字符串在值内,这与用户写的短语非常相似, document id = 1必须有更大的SCORE。
可以这样做吗?我是SOLR / Lucene的新手,所以我不知道是否需要使用特定的查询解析器,构建一个自定义的解析器......
感谢。
答案 0 :(得分:0)
所以基本上你的问题归结为如何根据匹配的早期提升文档。在Lucene中,支持SpanFirst查询,该查询提供了此功能。虽然在Solr Jira中有关于向Solr添加对SpanFirst的支持的开放票证,但我还没有看到任何有关此问题的信息。不过,您可以查看here以获取相关帮助。
答案 1 :(得分:0)
您可以尝试使用dismax / edismax Query Parser的最小匹配mm
参数。
mm
表示查询中必须匹配的最小子句数
使用mm
参数的solr请求网址。
例如:
.../solr/my_index/select?q=expressions:(one two three)&defType=dismax&mm=3...