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