FuzzyQuery查询

FuzzyQuery查询(可以简单地识别两个相近的词语)

 

1.在FuzzyQuery类定义中定义了两个成员变量:

private float minimumSimilarity;

private int prefixLength;

minimumSimilarity是最小相似度,取值范围为0.0~1.0,包含0.0但不包含1.0,默认值为0.5。prefixLength是前缀长度,默认为0。

  minimumSimilarity表示是最小相似度,可以通过指定一个相似度来决定模糊匹配的严格程度。默认为0.5,当这个值越小,通过模糊查找出的文档的匹配程度就越低,文档的数量也就越多;当这个值越大,说明要匹配程度更大,匹配的文档数也就越少,当相似度设置为1,那么就退化为TermQuery查询,所以当这个值>=1或<0会抛出IllegalArgumentException异常。

另外一个参数prefixLength表示在进行模糊匹配的时候,要有多少个前缀字母必须完全匹配。例如当该值设置为“1”,则表示所有此条只有第一个字母与检索关键字相符时,才会被集合选中。

2.构造方法

使用FuzzyQuery要从的构造方法开始,该类给出3种构造方式:

第一种:

public FuzzyQuery(Term term, float minimumSimilarity, int prefixLength) throws IllegalArgumentException {

    super(term);

    if (minimumSimilarity >= 1.0f)

      throw new IllegalArgumentException("minimumSimilarity >= 1");

    else if (minimumSimilarity < 0.0f)

      throw new IllegalArgumentException("minimumSimilarity < 0");

    if (prefixLength < 0)

      throw new IllegalArgumentException("prefixLength < 0");

   

    this.minimumSimilarity = minimumSimilarity;

    this.prefixLength = prefixLength;

}

第二种:

public FuzzyQuery(Term term, float minimumSimilarity) throws IllegalArgumentException {

      this(term, minimumSimilarity, defaultPrefixLength);

}

第三种:

public FuzzyQuery(Term term) {

    this(term, defaultMinSimilarity, defaultPrefixLength);

}

3.实例

详见http://www.haogongju.net/art/865455

Lucenne+盘古分词,FuzzyQuery,WildcardQuery 查询不了字母

10-11

Lucenne+盘古分词,FuzzyQuery,WildcardQuery 查询不了字母,查询数字是有结果 有,当查询关键字有字母是没有结果 。新手,请指教rn索引生成:rn[code=csharp]rn public bool CreateIndex(IndexWriter writer, MySearchUnit data)rn rn tryrn rnrn if (data == null) return false;rn Document doc = new Document();rn Type type = data.GetType();//assembly.GetType("Reflect_test.PurchaseOrderHeadManageModel", true, true); //命名空间名称 + 类名 rnrn //创建类的实例 rn //object obj = Activator.CreateInstance(type, true); rn //获取公共属性 rn PropertyInfo[] Propertys = type.GetProperties();rn for (int i = 0; i < Propertys.Length; i++)rn rn //Propertys[i].SetValue(Propertys[i], i, null); //设置值rn PropertyInfo pi = Propertys[i];rn string name = pi.Name;rn object objval = pi.GetValue(data, null);rn string value = objval == null ? "" : objval.ToString(); //值rn if (name == "id" || name == "flag")//id在写入索引时必是不分词,否则是模糊搜索和删除,会出现混乱rn rn doc.Add(new Field(name, value, Field.Store.YES, Field.Index.NOT_ANALYZED));//id不分词rn rn elsern rn doc.Add(new Field(name, value, Field.Store.YES, Field.Index.ANALYZED));rn rn rn writer.AddDocument(doc);rn writer.Close();rn rn catch (System.IO.FileNotFoundException fnfe)rn rn throw fnfe;rn rn return true;rn rn[/code]rn查询 (部分):rn public void Search0(string keyword)rn rn rn IndexSearcher searcher = new IndexSearcher(directory_luce, true);rn rn //构建一个Term,然后对其进行模糊查找 rn Term t = new Term("title", keyword);rn //FuzzyQuery query = new FuzzyQuery(t);rn //FuzzyQuery还有两个构造函数,来限制模糊匹配的程度 rn // 在FuzzyQuery中,默认的匹配度是0.5,当这个值越小时,通过模糊查找出的文档的匹配程度就 rn // 越低,查出的文档量就越多,反之亦然 rn //FuzzyQuery query1 = new FuzzyQuery(t, 0.5f, 3);rn //FuzzyQuery query2 = new FuzzyQuery(t, 0.0f);rn TopScoreDocCollector collector = TopScoreDocCollector.Create(110, false);rn rn rnrnrn WildcardQuery query = new WildcardQuery(t);rnrn // WildcardQuery query = new WildcardQuery(t);rn searcher.Search(query, (Filter)null, collector);rn rn ScoreDoc[] hits = collector.TopDocs(1, 10).ScoreDocs;rn List list = new List();rn int counter = 1;rn int TotalCount = collector.TotalHits;rn foreach (ScoreDoc sd in hits)//遍历搜索到的结果rn 。。。。rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试