Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Autocomplete 使用Lucene.NET自动完成地址_Autocomplete_Lucene_Lucene.net - Fatal编程技术网

Autocomplete 使用Lucene.NET自动完成地址

Autocomplete 使用Lucene.NET自动完成地址,autocomplete,lucene,lucene.net,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 Tol

我没能把这件事搞清楚。我试过几种不同的分析仪,它们都能让我接近,但不是我想要的。使用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,它就不会像我预期的那样返回。什么是最好的分析器,或者我使用了错误的查询

谢谢

编辑:


我已经得到了下面的答案,并在谷歌上搜索了很多次,我正在接近使用查询解析器和空白分析器。我只是让查询解析器确定最佳查询,它似乎可以工作。

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

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;
        }
public StartsWithQuery Prefix(字符串前缀,字符串[]字段,字典过滤器字段=null)
{
如果(!string.IsNullOrEmpty(前缀))
{
var parser=new MultiFieldQueryParser(Version.LUCENE_29,fields,new KeywordAnalyzer());
var boolQuery=new BooleanQuery();
boolQuery.Add(parser.Parse(前缀+“*”),BooleanClause.occure.MUST);
if(filterFields!=null)
{
foreach(filterFields中的var字段)
{
添加(新术语查询(新术语(field.Key,field.Value)),BooleanClause.occure.MUST);
}
}
}
归还这个;
}

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

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;
        }
public StartsWithQuery Prefix(字符串前缀,字符串[]字段,字典过滤器字段=null)
{
如果(!string.IsNullOrEmpty(前缀))
{
var parser=new MultiFieldQueryParser(Version.LUCENE_29,fields,new KeywordAnalyzer());
var boolQuery=new BooleanQuery();
boolQuery.Add(parser.Parse(前缀+“*”),BooleanClause.occure.MUST);
if(filterFields!=null)
{
foreach(filterFields中的var字段)
{
添加(新术语查询(新术语(field.Key,field.Value)),BooleanClause.occure.MUST);
}
}
}
归还这个;
}

谢谢,我将尝试一下。我只是尝试了一下,没有得到我期望的结果。谢谢,你让我朝着正确的方向前进。我有我想要的预期结果。前缀查询绝对是使其按我所希望的方式工作的关键。@Jamie,我很抱歉,我应该说我的方法是一个特定的实现,但内部代码是您可以使用的。谢谢,我将尝试一下。我只是尝试一下,没有得到我期望的结果。谢谢,你让我朝着正确的方向前进。我有我想要的预期结果。前缀查询绝对是使其按我所希望的方式工作的关键。@Jamie,我很抱歉,我应该说我的方法是一个特定的实现,但内部代码是您可以使用的。