Solr的通配符查询与空白(Solr wildcard query with whitespace)

2019-06-23 10:33发布

我有一个通配符查询,看起来像:

q=location:los a*

我想它匹配“洛杉矶”和“洛斯阿尔托斯”。 查询,如:

q=los*

工作得很好,但只要我添加空格我没有得到任何结果。 我怎么能在我的通配符查询使用空白?

Answer 1:

我最近遇到这个问题我自己,似乎所有你需要做的就是逃避查询的空间。 您原来的查询将通过Solr的被理解为是这样的:

location:los id:a*

(假设“ID”是默认搜索字段)

但是,如果你写你的查询为:

location:los\ a*

然后,它最终会被解析为:

location:los a*

和上面应该得到你的愿望(假设你的数据被正确索引)的结果。

提示:搞清楚这一切了很简单。 只需添加&debugQuery=on你提交查询时,看它是如何解析的Solr使用url结束。



Answer 2:

解决方案使用复杂的查询分析器您的问题:

q={!complexphrase inOrder=true}location:"los a*"

为了更多地了解复杂的短语查询分析器,结账这个环节! https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-ComplexPhraseQueryParser



Answer 3:

如果你只使用它通配符的后缀,因为我们是我可能会建议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的”或“鲍勃·斯密特”,但不能转换成的(“鲍勃”或“SMI *”)的检查,如果你用你可能会沿着线的考虑的第一个解决方案将发生q=name:Bob%20Smi*

希望这是一些帮助你或其他人寻找一个简单的解决方案,因为我敲我的头靠在墙上几个小时,我发现这之前!



Answer 4:

没有看到你的配置,我会说使用KeywordTokenizerFactory为你空白可能标记化了。



Answer 5:

查询(假设你有空白标记者):Q =位置:洛杉矶一个*意味着你搜索与“基洛” Word文档,并与“A”开头的单词

Solr的(尽可能多的,我知道),无法确定是否一个字(或任期)之前,另一个出现。



Answer 6:

我想你应该使用这样的配置

  <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>

你必须处理你输入的关键字搜索广告作为删除空白



Answer 7:

对于我的工作

<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中的文字一个需要逃避\为\\)。



Answer 8:

我在我的项目有同样的问题。 当过我是搜索词与我没有歌厅结果的空白一起。 所以我取代用连字符空格“ - ”,而索引和查询。 下面是我用来做这样的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>


文章来源: Solr wildcard query with whitespace
标签: solr wildcard