簡體   English   中英

Solr查詢結果使用*

[英]Solr query results using *

我想提供部分匹配,所以我在*搜索查詢的末尾。 我注意到,gatorade的搜索查詢將返回12個結果,而gatorade *返回7.所以*似乎是1或許多而不是0或許多......我怎樣才能實現這一點? 我在索爾的部分匹配是否都錯了? 謝謝。

首先,我認為Solr通配符更好地概括為“0或許多”而不是“1或許多”。 我懷疑這是你問題的根源。 (例如,請參閱WildcardQuery的javadoc 。)

第二,你是否正在使用詞干,因為我的第一個猜測是你正在處理一個詞干問題。 Solr通配符可以表現出奇怪的干擾。 這是因為通配符擴展的基礎是搜索存儲在倒排索引中的術語列表; 這些術語將采用詞干形式(可能類似於“gatorad”),而不是原始源文本中的詞語(可能是“gatorade”或“gatorades”)。

例如,假設你有一個將“g​​atorade”和“gatorades”映射到詞干“gatorad”的詞干分析器。 這意味着您的倒排索引不包含“gatorade”或“gatorades”,只包含“gatorad”。 如果您隨后發出查詢gatorade * ,Solr將遍歷術語索引,查找以“gatorade”開頭的所有詞干。 但是沒有這樣的詞干,所以你不會得到任何比賽。 同樣,如果您搜索了gatorades * ,Solr將查找以“gatorades”開頭的所有詞干。 但是沒有這樣的詞干,所以你不會得到任何比賽。

第三,為了獲得最佳幫助,我建議發布更多信息,特別是:

  • 您要提交給Solr的一些特定查詢URL
  • 您的schema.xml文件的摘錄。 特別是,包括A)您遇到問題的字段的字段元素,以及B)與這些字段對應的字段類型定義

所以我想要的是為'gatorade' - >'gatorade OR gatorade *'制作搜索詞,這將給我所有我正在尋找的比賽。

如果您希望查詢返回所有與gatorade的詞干形式或以gatorade開頭的詞匹配的文檔,則需要自己構造查詢:+(gatorade gatorade *)。 您也可以擴展SolrParser來執行此操作,但這樣做更多。

我的猜測是缺少的匹配是“Gatorade”(大寫'G'),你的領域有一個小寫的過濾器。 想法是你在schema.xml中有過濾器來預處理輸入數據,但是通配符查詢不使用它們; 看看Solr如何處理通配符查詢:

http://solr.pl/en/2010/12/20/wildcard-queries-and-how-solr-handles-them/(“Solr和通配符處理”)。

另一種方法是使用NGrams和TokenFilterFactories ,特別是 EdgeNGramFilterFactory。

這將為ngrams或部分單詞創建索引。 最小ngram大小為5,最大ngram大小為8的文檔將索引:Docum Docume文檔文檔

索引大小和時間有一點權衡。 其中一本Solr書籍引用作為粗略指南:索引需要10倍的時間使用5倍的磁盤空間創建6倍不同的術語。

但是,EdgeNGram會做得更好。

您需要確保不在查詢中提交通配符。 由於您沒有進行通配符搜索,因此您在ngrams(單詞部分)上匹配搜索詞。

從我讀過的那些通配符中,只有在搜索詞之后匹配帶有附加字符的單詞。 “Gatorade *”將與Gatorades相匹敵,但Gatorade本身並不匹配。 似乎在版本3.6中對Solr進行了更新,通過使用“multiterm”字段類型而不是“text”字段將其考慮在內。

這里有一個更好的描述:

http://bensch.be/the-solr-wildcard-problem-and-multiterm-solution

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM