Solr的通配符查询我有一个通配符查询,看起来像:与空白
q=location:los a*
我想它匹配“洛杉矶”和“洛斯阿尔托斯”。一个查询如下:
q=los*
工作得很好,但只要我添加空格,我就没有结果。我如何在通配符查询中使用空格?
Solr的通配符查询我有一个通配符查询,看起来像:与空白
q=location:los a*
我想它匹配“洛杉矶”和“洛斯阿尔托斯”。一个查询如下:
q=los*
工作得很好,但只要我添加空格,我就没有结果。我如何在通配符查询中使用空格?
没有看到你的配置,我会说使用KeywordTokenizerFactory,因为你现在可能在空白处标记化。
谢谢,我使用DefaultAnaylzer索引,和我的任期文字是“洛杉矶”索引(无符号化)。 – tbaz 2012-04-05 17:06:41
查询(假设你有空白标记者): Q =位置:洛杉矶一* 意味着你搜索文件与“基洛”字,并以“一”
Solr的开头的单词(如多我知道)无法确定一个单词(或术语)是否出现在另一个单词之前。
我可以建议Solr的前缀查询插件,如果你只使用它通配符作为我们后缀http://lucene.apache.org/solr/4_0_0/solr-core/org/apache/solr/search/PrefixQParserPlugin.html
例如使用
http://localhost:8983/solr/collection/select?q={!prefix%20f=name}Bob%20Smi
将匹配“Bob Smith的”或“鲍勃·斯密特“但不会转换成(”Bob“或”Smi *“)的检查,如果您使用第一种解决方案,您可能会考虑沿着q=name:Bob%20Smi*
希望这对您或其他人有一些帮助寻找因为在我发现这件事之前,我已经把头撞到了墙上几个小时了!
我最近自己遇到了这个问题,看起来你需要做的只是在查询中跳过空格。您原来的查询将通过Solr的是这样的解释:
location:los id:a*
(假设“ID”是默认搜索字段)
但是,如果你写你的查询为:
location:los\ a*
然后,它最终将被解析为:
location:los a*
和上面应产生的结果你想要的东西(假设你的数据被正确地编入索引)。
提示:所有这一切都很简单。只需将&debugQuery=on
添加到您在提交查询时使用的网址末尾,以查看Solr如何解析它。
我已经证实了这一工程使用字符串字段(而不是文字,看http://stackoverflow.com/questions/2630879/solr-exact-word-search获取更多信息)。希望我能发现这个越快......也,debugQuery =上值得自身的给予好评 - 非常有帮助! – BLogan 2013-01-23 17:30:52
我认为你应该使用这样
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="(\s+)" replacement="" replace="all" />
</analyzer>
</fieldType>
的配置,你必须处理你输入的关键字搜索广告作为去除空白
为我工作
<fieldtype name="text_like" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="1000"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldtype>
和查询field:*some\ phrase*
(在Java文字中,需要将\ \转义为\\)。
解决方案使用复杂的查询分析器您的问题:
q={!complexphrase inOrder=true}location:"los a*"
为了更多地了解复杂的短语查询分析器,结账这个环节! https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-ComplexPhraseQueryParser
谢谢彼得!我已经更新了我的答案 – Jaikumar 2015-05-07 18:28:28
我在我的项目有同样的问题。当我一直在搜索与空白字一起的时候,我并没有注意到结果。因此,我在索引和查询时用连字符“ - ”替换了空格。下面是我用来这样做的schema.xml snipet:
<fieldType name="text_ci" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="250"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="([/\s+])" replacement="-" replace="all"
/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="250"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="([/\s+])" replacement="-" replace="all"
/>
</analyzer>
</fieldType>
也许这是不可能的,前缀短语查询是不允许的:[link](http://lucene.apache.org/core /old_versioned_docs/versions/3_4_0/queryparsersyntax.html#Wildcard%20ASearches) – tbaz 2012-04-05 18:07:43