⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 termquery.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
字号:
package org.apache.lucene.search;/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */import java.io.IOException;import java.util.Set;import org.apache.lucene.index.Term;import org.apache.lucene.index.TermDocs;import org.apache.lucene.index.IndexReader;import org.apache.lucene.util.ToStringUtils;/** A Query that matches documents containing a term.  This may be combined with other terms with a {@link BooleanQuery}.  */public class TermQuery extends Query {  private Term term;  private class TermWeight implements Weight {    private Similarity similarity;    private float value;    private float idf;    private float queryNorm;    private float queryWeight;    public TermWeight(Searcher searcher)      throws IOException {      this.similarity = getSimilarity(searcher);      idf = similarity.idf(term, searcher); // compute idf    }    public String toString() { return "weight(" + TermQuery.this + ")"; }    public Query getQuery() { return TermQuery.this; }    public float getValue() { return value; }    public float sumOfSquaredWeights() {      queryWeight = idf * getBoost();             // compute query weight      return queryWeight * queryWeight;           // square it    }    public void normalize(float queryNorm) {      this.queryNorm = queryNorm;      queryWeight *= queryNorm;                   // normalize query weight      value = queryWeight * idf;                  // idf for document    }    public Scorer scorer(IndexReader reader) throws IOException {      TermDocs termDocs = reader.termDocs(term);      if (termDocs == null)        return null;      return new TermScorer(this, termDocs, similarity,                            reader.norms(term.field()));    }    public Explanation explain(IndexReader reader, int doc)      throws IOException {      ComplexExplanation result = new ComplexExplanation();      result.setDescription("weight("+getQuery()+" in "+doc+"), product of:");      Explanation idfExpl =        new Explanation(idf, "idf(docFreq=" + reader.docFreq(term) +            ", numDocs=" + reader.numDocs() + ")");      // explain query weight      Explanation queryExpl = new Explanation();      queryExpl.setDescription("queryWeight(" + getQuery() + "), product of:");      Explanation boostExpl = new Explanation(getBoost(), "boost");      if (getBoost() != 1.0f)        queryExpl.addDetail(boostExpl);      queryExpl.addDetail(idfExpl);      Explanation queryNormExpl = new Explanation(queryNorm,"queryNorm");      queryExpl.addDetail(queryNormExpl);      queryExpl.setValue(boostExpl.getValue() *                         idfExpl.getValue() *                         queryNormExpl.getValue());      result.addDetail(queryExpl);      // explain field weight      String field = term.field();      ComplexExplanation fieldExpl = new ComplexExplanation();      fieldExpl.setDescription("fieldWeight("+term+" in "+doc+                               "), product of:");      Explanation tfExpl = scorer(reader).explain(doc);      fieldExpl.addDetail(tfExpl);      fieldExpl.addDetail(idfExpl);      Explanation fieldNormExpl = new Explanation();      byte[] fieldNorms = reader.norms(field);      float fieldNorm =        fieldNorms!=null ? Similarity.decodeNorm(fieldNorms[doc]) : 0.0f;      fieldNormExpl.setValue(fieldNorm);      fieldNormExpl.setDescription("fieldNorm(field="+field+", doc="+doc+")");      fieldExpl.addDetail(fieldNormExpl);            fieldExpl.setMatch(Boolean.valueOf(tfExpl.isMatch()));      fieldExpl.setValue(tfExpl.getValue() *                         idfExpl.getValue() *                         fieldNormExpl.getValue());      result.addDetail(fieldExpl);      result.setMatch(fieldExpl.getMatch());            // combine them      result.setValue(queryExpl.getValue() * fieldExpl.getValue());      if (queryExpl.getValue() == 1.0f)        return fieldExpl;      return result;    }  }  /** Constructs a query for the term <code>t</code>. */  public TermQuery(Term t) {    term = t;  }  /** Returns the term of this query. */  public Term getTerm() { return term; }  protected Weight createWeight(Searcher searcher) throws IOException {    return new TermWeight(searcher);  }  public void extractTerms(Set terms) {    terms.add(getTerm());  }  /** Prints a user-readable version of this query. */  public String toString(String field) {    StringBuffer buffer = new StringBuffer();    if (!term.field().equals(field)) {      buffer.append(term.field());      buffer.append(":");    }    buffer.append(term.text());    buffer.append(ToStringUtils.boost(getBoost()));    return buffer.toString();  }  /** Returns true iff <code>o</code> is equal to this. */  public boolean equals(Object o) {    if (!(o instanceof TermQuery))      return false;    TermQuery other = (TermQuery)o;    return (this.getBoost() == other.getBoost())      && this.term.equals(other.term);  }  /** Returns a hash code value for this object.*/  public int hashCode() {    return Float.floatToIntBits(getBoost()) ^ term.hashCode();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -