如何在XmlQueryParser语法中获得此标准lucene查询?
headline:(new -york)
这是我到目前为止所拥有的:
{!xmlparser}
<SpanNot fieldName="headline">
<Include>
<SpanTerm>new</SpanTerm>
</Include>
<Exclude fieldName="headline">
<SpanTerm>york</SpanTerm>
</Exclude>
</SpanNot>
我最初没有包括fieldName =&#34;标题&#34;对于Exclude节点,但是当我不断得到&#34; york&#34;在头条新闻中。
以下是一些结果:
{"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"
问题是为什么我在结果中纽约?
答案 0 :(得分:1)
您的查询正在查找包含“new”但不包含“york”的跨度(字段的某些片段)。简单地说“新”一词就足以提供这一点。通常,这将与SpanNear或类似的东西一起使用,这使它更有用。例如,如果您的Include,intead中的术语“new”和“term2”有一个SpanNear,则可以匹配“ new other stuff term2 york etc”,因为“york”的实例会掉落在包含中匹配的外部跨度,但“纽约term2”将不匹配,因为“york”属于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>