2013-07-25 2 views
2

우리는 "... ... 2 % 우유"텍스트를Elasticsearch 검색에서 와일드 카드 필요한 연산자를 사용

를 포함하는 우리의 Elasticsearch 지수 내 다양한 ​​행을 가지고있다.

사용자는 검색 필드에 "2 % 우유"와 같은 쿼리를 입력하고 모든 용어가 필요해야하기 때문에 우리는 쿼리

title:(+milk* +2%*) 

에 내부적으로 변환하고 우리가 포함 된 행에 아마도 관심 "2 % milkfat".

위의 쿼리는 0 번째 히트를 반환합니다. 쿼리를

title:(+milk* +2%) 

으로 반환하면 결과가 올바르게 반환됩니다. 그렇다면 첫 번째 쿼리에서 '*'연산자가 작동하지 않는 이유는 무엇입니까?

답변

2

매핑을 설정하지 않으면 토큰 화 프로세스에서 "%"기호가 제거됩니다. 기본적으로 "2 % 우유"는 토큰 2milk으로 바뀝니다.

"2 % *"를 검색하면 2%, 2%a, 2%b 등과 같은 토큰을 찾습니다. 색인 된 토큰과 일치하지 않으므로 조회수가 없습니다.

"2 %"를 검색하면 색인 시간과 동일한 토큰 화 과정을 거치게됩니다 (지정할 수 있지만 기본 토큰 화는 동일합니다). 그러면 토큰과 일치하는 문서를 찾습니다 2, 이는 당신에게 히트를 줄 것입니다.

당신은 read more about the analysis/tokenization process here 수 있으며 defining a custom mapping

행운하여 원하는 분석을 설정할 수 있습니다!

0

접미사 및 와일드 카드 쿼리는 분석기를 해당 내용에 적용하지 않는 것으로 보입니다. 몇 가지 예를 제공한다 :

  • title:(+milk* +2%) ->+title:milk* +title:2
  • title:(+milk* +2%*) ->+title:milk* +title:2%*
  • title:(+milk* +2%3) ->+title:milk* +(title:2 title:3)
  • title:(+milk* +2%3*) ->+title:milk* +title:2%3*
  • +title:super\\-milk ->+title:super title:milk
  • +title:super\\-milk* ->+title:super-milk*

와일드 카드 구문 쿼리가 허용되지 않으므로 와일드 카드 쿼리의 토큰 화를 방지하는 것이 좋습니다. 토큰 화가 허용되면, 특히 와일드 카드가 적용될 수있는 용어의 수를 묻어 놓은 와일드 카드를 사용하여 질문을하는 것으로 보입니다.

+0

첫 줄에서'2 %'를'2'로 변경 했으므로 몇 가지 분석이 진행되어야합니까? 어쩌면 혼란 스럽네요 ... – ramseykhalaf

+0

예, 첫 번째 줄에서'2 %'쿼리는 와일드 카드를 사용하지 않으므로 분석 중입니다. 두 번째에는 와일드 카드가 첨부되어 있으므로 해당 필드의 분석은 수행되지 않습니다. – femtoRgon

+0

아, 네가 의미하는 바를 알았어. 미안, 오해! – ramseykhalaf

관련 문제