Я новичок в Elastic Search в ASP.NET, и у меня есть проблема, которую я до сих пор не могу решить.
Из документации я видел, что знак &
не указан в качестве специального символа. Тем не менее, когда я отправляю свой поиск знак амперсанда полностью игнорируется. Например, если я ищу знак procter & gamble
, знак &
полностью игнорируется. Это создает для меня много проблем, потому что у меня есть такие компании, как M&S
. Когда знак &
игнорируется, я получаю в основном все, что содержит М или S. Если я пытаюсь с точным поиском (M&S
), у меня та же проблема.
Мой код:
void Connect()
{
node = new Uri(ConfigurationManager.AppSettings["Url"]);
settings = new ConnectionSettings(node);
settings.DefaultIndex(ConfigurationManager.AppSettings["defaultIndex"]);
settings.ThrowExceptions(true);
client = new ElasticClient(settings);
}
private string escapeChars(string inStr) {
var temp = inStr;
temp = temp
.Replace(@"\", @"\\")
.Replace(@">",string.Empty)
.Replace(@"<",string.Empty)
.Replace(@"{",string.Empty)
.Replace(@"}",string.Empty)
.Replace(@"[",string.Empty)
.Replace(@"]",string.Empty)
.Replace(@"*",string.Empty)
.Replace(@"?",string.Empty)
.Replace(@":",string.Empty)
.Replace(@"/",string.Empty);
return temp;
}
А потом внутри одной из моих функций
Connect();
ISearchResponse<ElasticSearch_Result> search_result;
var QString = escapeChars(searchString);
search_result = client.Search<ElasticSearch_Result>(s => s
.From(0)
.Size(101)
.Query(q =>
q.QueryString(b =>
b.Query(QString)
//.Analyzer("whitespace")
.Fields(fs => fs.Field(f => f.CompanyName))
)
)
.Highlight(h => h
.Order("score")
.TagsSchema("styled")
.Fields(fs => fs
.Field(f => f.CompanyName)
)
)
);
Я пытался включить анализаторы, но потом я обнаружил, что они меняют способ токенизаторов split
слов. Мне не удалось внести изменения в токенизатор.
Я бы хотел иметь следующий сценарий:
Поиск: M&S Company Foo Bar
Жетоны: M&S
Company
Foo
Bar
+ бонус, если возможно иметь M
S
жетонов тоже
Я использую упругий поиск V5.0.
Любая помощь приветствуется. Включая лучшую документацию, чем та, которую можно найти здесь: https://www.elastic.co/guide/en/elasticsearch/client/net-api/5.x/writing-queries.html.