2016-05-12 12 views
0

XmlQueryParser構文でこの標準のluceneクエリを取得するにはどうすればよいですか?Solr Lucene XmlQueryParser Span除外除外除外

headline:(new -york) 

は、ここで私がこれまで持っているものです。

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

私はもともと除外ノードのためのフィールド名=「見出し」を含んでいませんでしたが、私は「ニューヨーク」を取得保管するとき、私はこれを追加しました見出し。ここで

を通じ来ている結果の一部されている:私はニューヨークを取得していますなぜ問題がある

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

{"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"} 

は、ここで応答したデバッグ出力の一部です私の結果に?

答えて

1

"new"が含まれていて、 "york"は含まれていないスパン(フィールドの断片)を検索しています。単に「新しい」という言葉を使うだけで十分です。通常、これはSpanNearなどで使用されるため、より便利になります。たとえば、Include、inteadに「new」と「term2」という用語のSpanNearがある場合、「york」のインスタンスが範囲内で一致するため、「other other stuff term2 york etc」に一致する可能性があります。 "york"はSpanNearに含まれているため、 "new york term2"はマッチしません。

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を使用すれば、「york」と一致するすべてのドキュメントを除外できますか? – Brandon

+0

私の目標:単語「new」を含む文書を検索し、単語「york」を含む文書を除外します。 – Brandon

+0

@Brandon - "new"にマッチして "york"にマッチするものを探したいだけなら、SpanQueryをまったく使用しません。 'headline:(new -york)'のようなクエリはそれを行います。 xmlparserを使用すると、BooleanQueryを使用できます。[ここの例](https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-XMLQueryParser)を参照してください。 – femtoRgon