2015-11-19 106 views
0

我的架構中有一個多值字段,名爲citation。在一個數據庫中的文件有值這個領域,如:只搜索Solr多值字段的單個值,不跨越值

"citation":["13-33", 
      "12-44"], 

我希望能夠做一個查詢,如:citation:(13 44)並沒有這個文件返回。換句話說,我做而不是希望查詢跨越該字段的各個值。

有沒有辦法做到這一點?


使用文檔的某些其它例子上面的我怎麼這個工作:

  • 引文:(13 33) - >返回。
  • 引用:(12 44) - >將其返回。
  • 引用:(12) - >將其返回。
  • 引用:(33 13) - >返回它。
  • 引用:(33 12) - >不回覆它。

回答

0

SurroundQueryParser是搞清楚兩個詞是否在多值字段的值相同您最好的選擇。該多值字段實際上是一個內部長令牌集但屬於不同的令牌之間存在很大的差距「值」。這由schema.xml中的positionIncrementGap參數控制,通常爲100.因此,將最大差距設置爲低於100將需要兩個項都在一個字段值內。

+0

這假定整個值小於99級的令牌長,是嗎? – mlissner

+0

如果您的文字較長,請將間距設置爲1000或10000.它不會佔用額外的空間,該值只是令牌索引位置的增量。 –

+0

今天我使用了這個工具,看起來我可以使用'〜'工作,但不使用'{〜surround}'。這可能是我無法弄清'surround'的語法,但是這兩者之間有區別嗎? – mlissner

0

我想你可以用citation字段的正確字段類型和標記化來解決這個問題。如果你使用字段類型是這樣的:

<fieldType name="citation" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.PatternCaptureGroupFilterFactory" 
      pattern="([0-9]+)-[0-9]+" preserve_original="true"/> 
</analyzer> 
</fieldType> 

然後你的榜樣文件將被編入索引因此:

「引文」: 「13」, 「13-33」, 「12」,「12 -44" ]

這意味着該文件將匹配citation:"13"citation:"13-33",但不citation:"13-12"citation:"13-44"

+0

這是一個有趣的策略,但實際上引用並不經常。不幸的是,不同的法院使用不同的格式,我不認爲正則表達式可以匹配所有的格式。 – mlissner