使用Lucene .NET自动完成地址

时间:2011-10-01 03:00:35

标签: autocomplete lucene lucene.net

我无法确定这一点。我尝试了几种不同的分析仪,它们都让我很接近,但不完全是我想要的。目前不能使用SOLR。

我想要的例子:

    Input: 200
    Matches:  200 E Dragon Dr.
              200 W Paragon Rd.
              200 Lick Skillet Dr.

    Input: 200 E
    Matches:  200 E Dragon Dr.
              200 E Toll Rd.

    Input: 200 E D
    Matches: 200 E Dragon Dr.

如果我使用简单的分析仪,那么它与数字不匹配。空白分析器只用数字就可以获得所需的效果,但是一旦我添加E它就不会像我期望的那样返回。什么是最好的分析器或我使用错误的查询?

谢谢,

编辑:

我已经采取了以下答案,并进行了大量的谷歌搜索,我正在接近使用查询解析器和whitespaceanalyzer。我只是让查询解析器确定最佳查询,它似乎工作。

1 个答案:

答案 0 :(得分:1)

尝试使用关键字分析器和查询解析器来搜索Lucene中的地址字段。我正在使用MultiFieldQueryParser,但您也可以使用常规查询解析器:

public StartsWithQuery Prefix(string prefix, string[] fields, Dictionary<string,string> filterFields = null )
        {
           if(!string.IsNullOrEmpty(prefix))
           {


               var parser = new MultiFieldQueryParser(Version.LUCENE_29, fields, new KeywordAnalyzer());
               var boolQuery = new BooleanQuery();

               boolQuery.Add(parser.Parse(prefix + "*"), BooleanClause.Occur.MUST);
               if (filterFields != null)
               {
                   foreach (var field in filterFields)
                   {
                        boolQuery.Add(new TermQuery(new Term(field.Key, field.Value)), BooleanClause.Occur.MUST);

                   }
               }

           }

            return this;
        }