我正在尝试使用Solr来解决这个问题:
在专用核心中,我加载了一些特定的文本,在schema.xml中定义如下:
...
<field name="pieceOfText" type="text_general" indexed="true" required="true" stored="true" multiValued="false"/>
...
这些是pieceOfText的示例: “这是一些文字” “这是文字” “这是其他文字”
现在,给定任意查询字符串,例如“这是一个任意字符串中的一些文本”,我希望Solr只返回我的pieceOfText 其中100%与查询字符串的连续部分匹配。对于上面的示例,它将仅返回“这是一些文本”,而“这是文本”和“这是其他文本”不应出现在结果中,因为它们不会100%数学与respet到查询字符串。
我已经尝试过mm =“100%”,但似乎它对我不起作用,因为它迫使edismax找到一个与100%的查询字符串匹配的pieceOfText,(对吧?)
我定义了这个reqestHandler:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="defType">edismax</str>
<str name="df">pieceOfText</str>
<int name="qs">0</int>
<str name="fl">pieceOfText,score</str>
</lst>
</requestHandler>
任何建议都将非常感谢! 谢谢大家 斯特凡诺
答案 0 :(得分:0)
通常,短语搜索用于在长文本中找到小短语(查询)(检索/ UoR单位)。在您的情况下,UoR是一个小短语,您的查询是一个长文本。
对于倒排索引,这是一个难题。
您可以编写自己的查询解析器(使用SpanPositionCheckQuery
作为起点)或...
您可以将查询扩展为很多短语,例如n-gram搜索:
<start>
作为您所有UoR的第一个令牌,并添加一个令牌<end>
作为最后一个令牌。<start>
A <end>
”<start>
B <end>
”<start>
C <end>
”<start>
A B <end>
”<start>
B C <end>
”<start>
A B C <end>
”请勿对您的UoR(KeywordTokenizer)进行标记,并使用ShingleFilter进行查询。