2016-05-12 68 views
0

如何在XmlQueryParser語法中獲得此標準lucene查詢?Solr Lucene XmlQueryParser跨度不排除排除

headline:(new -york) 

這是我到目前爲止有:

{!xmlparser} 
<SpanNot fieldName="headline"> 
    <Include> 
    <SpanTerm>new</SpanTerm> 
    </Include> 
    <Exclude fieldName="headline"> 
    <SpanTerm>york</SpanTerm> 
    </Exclude> 
</SpanNot> 

我本來不包括字段名=「標題」爲排除節點,但我加了它,當我一直在得到「約克」頭條新聞。

這裏有一些結果被未來通過:

{"id":243832340000000092, "headline":"New look pour New York"}, 
{"id":243661152000000019, "headline":"New York/New Market Project"}, 
{"id":243959040000000448, "headline":"New York Backs New Transmission Lines"} 

下面是一些在響應調試輸出:

"rawquerystring":"{!xmlparser}\n<SpanNot fieldName=\"headline\">\n <Include>\n\t<SpanTerm>new</SpanTerm>\n </Include>\n <Exclude fieldName=\"headline\">\n\t<SpanTerm>york</SpanTerm>\n </Exclude>\n</SpanNot>", 

"querystring":"{!xmlparser}\n<SpanNot fieldName=\"headline\">\n <Include>\n\t<SpanTerm>new</SpanTerm>\n </Include>\n <Exclude fieldName=\"headline\">\n\t<SpanTerm>york</SpanTerm>\n </Exclude>\n</SpanNot>", 

"parsedquery":"SpanBoostQuery(spanNot(headline:new^1.0, headline:york^1.0, 0, 0)^1.0)", 

"parsedquery_toString":"spanNot(headline:new^1.0, headline:york^1.0, 0, 0)^1.0", 
     "QParser":"XmlQParser" 

問題是爲什麼我收到紐約在我的結果?

回答

1

您的查詢正在查找包含「新」,但不包含「約克」的跨度(字段的某個片段)。簡單地使用「新」這個詞就足以說明這一點。通常,這將與SpanNear或類似的東西一起使用,這使它更有用。例如,如果您的Include,intead中的術語「新」和「term2」有SpanNear,則可以匹配「新的其他東西term2約克等」,因爲「約克」的實例落在與包括,但「紐約term2」將不匹配,因爲「約克」落在SpanNear內。

SpanNot實際上確實有constructor arguments你可以使用到一定距離內檢查外包括跨度。我不確定這是否支持xmlparser(我不熟悉它),但如果是這樣,我會想像這樣的:

{!xmlparser} 
<SpanNot fieldName="headline"> 
    <Include> 
    <SpanTerm>new</SpanTerm> 
    </Include> 
    <Exclude fieldName="headline"> 
    <SpanTerm>york</SpanTerm> 
    </Exclude> 
    <Pre>0</Pre> 
    <Post>1</Post> 
</SpanNot> 
+0

好的,所以你說SpanNot的工作是找到一個跨度,包括世界各地的(瘋狂的大或瘋狂的簡單),但排除任何比賽?如果是這樣,我想我已經開始明白了。我將使用哪種SpanQuery來排除任何匹配「約克」的文檔? – Brandon

+0

我的目標:查找包含單詞「新」的文檔,排除包含單詞「約克」的文檔。 – Brandon

+0

@Brandon - 如果你只是想找到任何匹配「新」,但不是「約克」的東西,我根本不會使用SpanQuery。像這樣的一個查詢:'標題:(new-york)'會做到這一點。使用xmlparser,你可以使用布爾查詢,參見[示例這裏](https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-XMLQueryParser)。 – femtoRgon